LinuxForum.Fans
Тема

Ошибка при выполнении скрипта syslog-ng

Автор: mil612 25 сообщений 6570 просмотров
#233455

Собственно имеется скрипт syslog-ng адаптированный под мои нужды, но его часть

text
if [! cat /etc/rc.d/rc.M | grep 'next generation system logger']; then
    echo "# Start the next generation system logger." >> /etc/rc.d/rc.M 
    echo "if [ -x /etc/rc.d/rc.syslog-ng ]; then" >> /etc/rc.d/rc.M 
    echo "  . /etc/rc.d/rc.syslog-ng start " >> /etc/rc.d/rc.M 
    echo "fi" >> /etc/rc.d/rc.M 
fi

наотрез отказывается работать и выдает следующее сообщение
[console]./install_syslog.sh: line 75: [!: command not found
Configuration file has no version number, assuming syslog-ng 2.1 format. Please add @version: maj.min to the beginning of the file;
WARNING: global: the default value of chain_hostnames is changing to 'no' in version 3.0, please update your configuration accordingly;
Your configuration file uses an obsoleted keyword, please update your configuration; keyword='sync', change='flush_lines'
WARNING: input: sources do not remove new-line characters from messages by default in version 3.0, please add 'no-multi -line' flag to your configuration if you want to retain this functionality;
WARNING: template: the default value for template-escape is changing to 'no' in version 3.0, please update your configuration file accordingly;[/console]
собственно сам скрипт

Показать
#! /bin/sh
# Install some packages
installpkg ./eventlog-0.2.7-i486-1gufo.tgz
installpkg ./syslog-ng-3.0.2-i486-1gufo.tgz
# Getting IP on eth0
IP=`ifconfig | grep 'inet ' | cut -f 2 -d ":" | cut -f 1 -d " " |grep '' -m 1`;
# Generating /etc/syslog-ng/syslog-ng.conf
echo "options { long_hostnames(off); sync(0); };" > /etc/syslog-ng/syslog-ng.conf
echo '''
source src { unix-stream("/dev/log"); internal(); };
source from_all { udp (ip('''$IP''') port(514)); };

destination to_all { file ( "/var/log/HOSTS/$HOST/$HOST.log" perm(0666) dir_perm(0755) create_dirs(yes) ); };
destination authlog { file("/var/log/auth.log"); };
destination cron { file("/var/log/cron.log"); };
destination daemon { file("/var/log/daemon.log"); };
destination kern { file("/var/log/kern.log"); };
destination lpr { file("/var/log/lpr.log"); };
destination user { file("/var/log/user.log"); };
destination uucp { file("/var/log/uucp.log"); };
destination ppp { file("/var/log/ppp.log"); };
destination debug { file("/var/log/debug"); };
destination messages { file("/var/log/messages"); };
destination console { usertty("root"); };
destination console_all { file("/dev/tty12"); };
#destination loghost { udp("loghost" port(999)); };

destination xconsole { pipe("/dev/xconsole"); };

filter f_auth { facility(auth); };
filter f_authpriv { facility(auth, authpriv); };
filter f_syslog { not facility(authpriv, mail); };
filter f_cron { facility(cron); };
filter f_daemon { facility(daemon); };
filter f_kern { facility(kern); };
filter f_lpr { facility(lpr); };
filter f_user { facility(user); };
filter f_uucp { facility(cron); };
filter f_ppp { facility(local2); };
filter f_news { facility(news); };
filter f_debug { not facility(auth, authpriv); };
filter f_messages { level(info..warn)
and not facility(auth, authpriv); };
filter f_emergency { level(emerg); };

filter f_info { level(info); };
filter f_notice { level(notice); };
filter f_warn { level(warn); };
filter f_crit { level(crit); };
filter f_err { level(err); };

log { source(from_all); destination(to_all); };
log { source(src); filter(f_authpriv); destination(authlog); };
log { source(src); filter(f_cron); destination(cron); };
log { source(src); filter(f_daemon); destination(daemon); };
log { source(src); filter(f_kern); destination(kern); };
log { source(src); filter(f_lpr); destination(lpr); };
log { source(src); filter(f_user); destination(user); };
log { source(src); filter(f_uucp); destination(uucp); };
log { source(src); filter(f_debug); destination(debug); };
log { source(src); filter(f_messages); destination(messages); };
log { source(src); filter(f_emergency); destination(console); };
log { source(src); filter(f_ppp); destination(ppp); };
log { source(src); destination(console_all); };''' >> /etc/syslog-ng/syslog-ng.conf

#echo "source from_all { udp (ip(""$IP"") port(514)); };" >> /etc/syslog-ng/syslog-ng.conf
#echo 'source src { unix-stream("/dev/log"); internal(); };' >> /etc/syslog-ng/syslog-ng.conf
#echo 'destination to_all { file ( "/var/log/HOSTS/$HOST/$HOST.log" perm(0666) dir_perm(0755) create_dirs(yes) ); };' >> /etc/syslog-ng/syslog-ng.conf
#echo "log { source(from_all); destination(to_all); };" >> /etc/syslog-ng/syslog-ng.conf

cp ./rc.syslog-ng /etc/rc.d/rc.syslog-ng
chmod 755 /etc/rc.d/rc.syslog-ng
chmod 644 /etc/rc.d/rc.syslog
#cp ./rc.M /etc/rc.d/rc.M
if [! cat /etc/rc.d/rc.M | grep 'next generation system logger']; then
echo "# Start the next generation system logger." >> /etc/rc.d/rc.M
echo "if [ -x /etc/rc.d/rc.syslog-ng ]; then" >> /etc/rc.d/rc.M
echo " . /etc/rc.d/rc.syslog-ng start " >> /etc/rc.d/rc.M
echo "fi" >> /etc/rc.d/rc.M
fi
killall syslogd
killall syslog-ng
syslog-ng
#tar -zxvf ./Python-3.1.3.tgz
#cd ./Python-3.1.3
#./configure
#make
#make install
# Uncomment if U need some Python3.1
#233457
avaddon66 написал:
./install_syslog.sh: line 75: [!: command not found

пробел забыли между [!

#233459

да, команда [ есть, а команды [! нет. Посмотрите в /bin/ если не верите. Или в /usr/bin/

#233462

drBatty, ставил, и ! убирал, выдает
[console]./install_syslog.sh: line 75: [: missing `]'[/console]

так же при добавлении строк

text
destination iptables { file("/var/log/iptables"); };
...
filter iptables { match (iptables); };
...
log { source(src); filter(iptables); destination(iptables); };

выдается
[console]WARNING: the match() filter without the use of the value() option is deprecated and hinders performance, please update your configuration;[/console]

#233535
avaddon66 написал:
ставил, и ! убирал, выдает
Консоль:

./install_syslog.sh: line 75: [: missing `]'

фигасе поубирали oO
тут она пишет: не хватает ], т.е. скобку [открыли, но не закрыли]

avaddon66 написал:
так же при добавлении строк

destination iptables { file("/var/log/iptables"); };
...
filter iptables { match (iptables); };
...
log { source(src); filter(iptables); destination(iptables); };

этого я вообще не понял. Как и ваш bash.

#233538
avaddon66 написал:
if [! cat /etc/rc.d/rc.M | grep 'next generation system logger']; then

дык сама команда неправильная. Синтаксис следующий

text
if УСЛОВИЕ
then
   # тут пишем что делать если условие истинно
fi

при этом, УСЛОВИЕ это какая-то команда. Которая выдаёт код возврата. Если код равен нулю - условие истинно. У вас УСЛОВИЕ - спец-команда [, почитать про неё можно так
[console]$ man test[/console]
или погуглив в том же направлении. Например можно написать

text
if [ "X" = "Y" ]
then
    # эти команды никогда не выполнятся, ибо условие ложное
fi

А вы зачем-то в команду [ ] всунули какую-то другую команду.
Если хотите grep как условие, вообще уберите [скобки]

Да, ! перед УСЛОВИЕМ означает отрицание. И перед внутренним [в скобках] условием тоже.

#233566

убрал скобки и ! знак, скрипт выполнился без ошибок, но значения в rc.M не добавились

text
if [! cat /etc/rc.d/rc.M | grep 'next generation system logger']; then
    echo "# Start the next generation system logger." >> /etc/rc.d/rc.M 
    echo "if [ -x /etc/rc.d/rc.syslog-ng ]; then" >> /etc/rc.d/rc.M 
    echo "  . /etc/rc.d/rc.syslog-ng start " >> /etc/rc.d/rc.M 
    echo "fi" >> /etc/rc.d/rc.M 
fi

этим предполагалось, что при выполнении скрипта syslog-ng значения автоматически добавлять в скрипт rc.M дабы не прописывать все это в ручную, а это

text
destination iptables { file("/var/log/iptables"); };
...
filter iptables { match (iptables); };
...
log { source(src); filter(iptables); destination(iptables); };

для настройки логирования iptables, к сожалению в iptables у меня логируется то, что в messages и debug

#233621
avaddon66 написал:
убрал скобки и ! знак, скрипт выполнился без ошибок, но значения в rc.M не добавились

очевидно условие ложное.

avaddon66 написал:
этим предполагалось, что при выполнении скрипта syslog-ng значения автоматически добавлять в скрипт rc.M дабы не прописывать все это в ручную

я понял. Но это не Ъ костыль. Патрег смотрит на вас с осуждением :o

avaddon66 написал:
а это

destination iptables { file("/var/log/iptables"); };
...
filter iptables { match (iptables); };
...
log { source(src); filter(iptables); destination(iptables); };

для настройки логирования iptables, к сожалению в iptables у меня логируется то, что в messages и debug

а ЭТО не из Slackware вовсе. Это какие-то дебнозависимые костыли...
Если дистр не соответствует вашему профилю - пишите в соотв. тему. Я этим голову не забиваю. :P


ЗЫЖ если вы хотите управлять каким-то сервером - Ъ способ это не дописывать в /etc/rc.M (он вообще не для того), а просто менять командой chmod +-x права на соотв. скрипт. Именно для того условие if [ -x /etc/rc.d/rc.syslog-ng ]; then и предназначено.

#233685

ничего из вышеперечисленного мне не понятно, костыли кикие-то... я кроме команды echo не знаю ничего, доходчивее поясняйте пожалуйста
исходя из статьи http://www.opennet.ru/base/sys/syslog_ng.txt.html

Добавляем в /etc/rc.d/rc.M:
# Start the next generation system logger.
if [ -x /etc/rc.d/rc.syslog-ng ]; then
. /etc/rc.d/rc.syslog-ng start
fi

это приходится делать все в ручную, а нужно чтобы при выполнении скрипта syslog-ng значения автоматически добавлять в скрипт rc.M, поскольку я в этом деле бестолковый, вот и прошу Вас умных людей доходчиво объяснить где ошибка
по поводу

а ЭТО не из Slackware вовсе. Это какие-то дебнозависимые костыли...

из той же статьи написано

Subject: Замена стандартного syslogd на syslog-ng в slackware linux.

только про iptables там не написано к сожалению

#233782

с ошибкой [console]./install_syslog.sh: line 75: [!: command not found[/console] разобрался, сейчас все прописывается и куда надо.
может кто-нибудь знает как избавиться от этих сообщений?
[console]Configuration file has no version number, assuming syslog-ng 2.1 format. Please add @version: maj.min to the beginning of the file;
WARNING: global: the default value of chain_hostnames is changing to 'no' in version 3.0, please update your configuration accordingly;
WARNING: input: sources do not remove new-line characters from messages by default in version 3.0, please add 'no-multi -line' flag to your configuration if you want to retain this functionality;
WARNING: template: the default value for template-escape is changing to 'no' in version 3.0, please update your configuration file accordingly;[/console]

#233912


Configuration file has no version number, assuming syslog-ng 2.1 format. Please add @version: maj.min to the beginning of the file;

что означает примерно следующее:
Файл настроек не содержит номера версии, использую формат syslog-ng 2.1. Добавьте @version: maj.min в начало этого файла.
Вместо maj.min подставить старший и младший номер версии syslog-ng.

Остальные 3 предупреждения после этого могут уйти (или нет), поскольку относятся к изменениям, сделанным в умолчальных значениях параметров между версиями. Например, chain_hostnames до 3.0 по умолчанию был "yes", а с 3.0 стал "no". Без номера версии нельзя сказать, что имел в виду админ при настройке, поэтому, чтобы не получилось неприятного сюрприза для тех, кто не трогал файл конфига после обновления до новой версии, выдаются подобные предупреждения.

#233924

bormant, Спасибо за дословный перевод, но смысл текста как бы понял и часть ругательств убрал (кроме этих конечно), я не знаю как добавить этот номер версии. В логах messages написано что version='3.0'/
Написал начало скрипта

text
version='3.0.2'

и

text
syslog-ng='3.0.2'

, но что-то все равно не так делаю :o

#233930
avaddon66 написал:
Спасибо за дословный перевод, но смысл текста как бы понял
bormant написал:
Добавьте @version:maj.min в начало этого файла.
Вместо maj.min подставить старший и младший номер версии syslog-ng.

У меня получается по описанию только
@version:3.0
Как у вас получается что-то ещё -- не могу знать.

В руководстве
http://www.balabit.com/sites/default/files/syslog-ng-v3.0-guide-admin-en.pdf?q=dl/guides/syslog-ng-v3.0-guide-admin-en.pdf на стр.30 то же самое написано.

#233962

Вписал по описанию в файл syslog-ng.conf строку @version: 3.0, после рестарта rс.syslog-ng подобных "ругательств" нет, но при запуске самого скрипта сообщения остаются

Показать
#! /bin/sh
# Install some packages
installpkg ./eventlog-0.2.7-i486-1gufo.tgz
installpkg ./syslog-ng-3.0.2-i486-1gufo.tgz
# Getting IP on eth0
IP=`ifconfig | grep 'inet ' | cut -f 2 -d ":" | cut -f 1 -d " " |grep '' -m 1`;
# Generating /etc/syslog-ng/syslog-ng.conf
@version:3.0
include "syslog-ng.conf";
echo "options { long_hostnames(off); sync(0); };" > /etc/syslog-ng/syslog-ng.conf
echo '''
source src { unix-stream("/dev/log"); internal(); };
source from_all { udp (ip('''$IP''') port(514)); };
#233992
avaddon66 написал:
# Generating /etc/syslog-ng/syslog-ng.conf
@version:3.0
include "syslog-ng.conf";
echo "options { long_hostnames(off); sync(0); };" > /etc/syslog-ng/syslog-ng.conf

# -- знаю, комментарий
echo -- знаю, вывод сообщения.
пару строк между ними -- не знаю. И bash не знает, о том и говорит.

#234000

avaddon66,
вообще говоря, почему б не выводить файл конфигурации с помощью встроенного документа (here document),

text

cat << EOF > /etc/syslog-ng/syslog-ng.conf
@version:3.0
include "syslog-ng.conf";
options { long_hostnames(off); sync(0); };
source src { unix-stream("/dev/log"); internal(); };
source from_all { udp (ip($IP) port(514)); };
EOF
#234006

почему б не выводить файл конфигурации с помощью встроенного документа

потому, что я не знаю как, т.к. вообще не программист, мне и так очень тяжело осваивать поступающую информацию от вас :(
добавил ваш код в скрипт, в итоге в syslog-ng.conf добавились как раз

text
@version:3.0
include "syslog-ng.conf";
options { long_hostnames(off); sync(0); };
source src { unix-stream("/dev/log"); internal(); };
source from_all { udp (ip('''$IP''') port(514)); };

остальной конфигурации нет вовсе, и вышли ошибки
[console]./install_syslog.sh: line 16: syntax error near unexpected token `('
./install_syslog.sh: line 16: `destination to_all { file ( "/var/log/HOSTS/$HOST/$HOST.log" perm(0666)'dir_perm(0755) create_dirs(yes) ); };[/console]

#234009

avaddon66,
это был образец, показывающий, что такое here-document и насколько эффективно он заменяет портянки вроде

text
echo ... > /.../...
echo ... >> /.../...
echo ... >> /.../...

ps. В сообщении, на которое отвечал http://linuxforum.ru/viewtopic.php?pid=255772#p255772 ничего другого не было.

pps. В том сообщении нет строки 16. А в вашем скрипте -- есть. И в ней ошибка. Что в ней -- мне отсюда плоховато видно, только какие-то обрывки.

Повторюсь, идея была проста -- вложите ваш конфиг вместо "..." между строками
cat << EOF > /etc/syslog-ng/syslog-ng.conf
...
EOF
Если внутри нужны будут спецсимволы, вроде "$", их нужно отэкранировать "\$", сравните
destination to_all { file ( "/var/log/HOSTS/$HOST/$HOST.log" perm(0666)'dir_perm(0755) create_dirs(yes) ); };
destination to_all { file ( "/var/log/HOSTS/\$HOST/\$HOST.log" perm(0666)'dir_perm(0755) create_dirs(yes) ); };
Если нужно значение переменной -- экранировать не нужно:
source from_all { udp (ip($IP) port(514)); };
вместо $IP будет подставлено значение переменной окружения IP.

ppps. Не совсем понятно, зачем всё это делается и почему нельзя конфиг положить внутрь пакета или в файл рядом со скриптом. Если внутри переменных немного, их легко по месту поменять при помощи sed.

#234014
bormant написал:
В сообщении, на которое отвечал Ошибка при выполнении скрипта syslog-ng #255772 ничего другого не было.

пардон, надо было добавить скрипт полностью

Показать
#! /bin/sh
# Install some packages
installpkg ./eventlog-0.2.7-i486-1gufo.tgz
installpkg ./syslog-ng-3.0.2-i486-1gufo.tgz
# Getting IP on eth0
IP=`ifconfig | grep 'inet ' | cut -f 2 -d ":" | cut -f 1 -d " " |grep '' -m 1`;
# Generating /etc/syslog-ng/syslog-ng.conf
echo "options { long_hostnames(off); flush_lines(0); };" > /etc/syslog-ng/syslog-ng.conf
echo '''
source src { unix-stream("/dev/log"); internal(); };
source from_all { udp (ip('''$IP''') port(514)); };

destination to_all { file ( "/var/log/HOSTS/$HOST/$HOST.log" perm(0666) dir_perm(0755) create_dirs(yes) ); };
destination authlog { file("/var/log/auth.log"); };
destination cron { file("/var/log/cron.log"); };
destination daemon { file("/var/log/daemon.log"); };
destination kern { file("/var/log/kern.log"); };
destination lpr { file("/var/log/lpr.log"); };
destination user { file("/var/log/user.log"); };
destination uucp { file("/var/log/uucp.log"); };
destination ppp { file("/var/log/ppp.log"); };
destination debug { file("/var/log/debug"); };
destination messages { file("/var/log/messages"); };
destination iptables { file("/var/log/iptables.log"); };

destination console { usertty("root"); };
destination console_all { file("/dev/tty12"); };
#destination loghost { udp("loghost" port(999)); };
destination xconsole { pipe("/dev/xconsole"); };

filter f_auth { facility(auth); };
filter f_authpriv { facility(auth, authpriv); };
filter f_syslog { not facility(authpriv); };
filter f_cron { facility(cron); };
filter f_daemon { facility(daemon); };
filter f_kern { facility(kern); };
filter f_lpr { facility(lpr); };
filter f_user { facility(user); };
filter f_uucp { facility(cron); };
filter f_ppp { facility(local2); };
filter f_debug { not facility(auth, authpriv) and not filter(f_iptables); };
filter f_messages { level(info..warn)and not facility(auth, authpriv) and not filter(f_iptables); };
filter f_emergency { level(emerg); };
filter f_info { level(info); };
filter f_notice { level(notice); };
filter f_warn { level(warn); };
filter f_crit { level(crit); };
filter f_err { level(err); };
filter f_iptables { level(debug); };


log { source(from_all); destination(to_all); };
log { source(src); filter(f_authpriv); destination(authlog); };
log { source(src); filter(f_cron); destination(cron); };
log { source(src); filter(f_daemon); destination(daemon); };
log { source(src); filter(f_kern); destination(kern); };
log { source(src); filter(f_lpr); destination(lpr); };
log { source(src); filter(f_user); destination(user); };
log { source(src); filter(f_uucp); destination(uucp); };
log { source(src); filter(f_debug); destination(debug); };
log { source(src); filter(f_messages); destination(messages); };
log { source(src); filter(f_emergency); destination(console); };
log { source(src); filter(f_ppp); destination(ppp); };
log { source(src); filter(f_iptables); destination(iptables); };
log { source(src); destination(console_all); };''' >> /etc/syslog-ng/syslog-ng.conf

#echo "source from_all { udp (ip(""$IP"") port(514)); };" >> /etc/syslog-ng/syslog-ng.conf
#echo 'source src { unix-stream("/dev/log"); internal(); };' >> /etc/syslog-ng/syslog-ng.conf
#echo 'destination to_all { file ( "/var/log/HOSTS/$HOST/$HOST.log" perm(0666) dir_perm(0755) create_dirs(yes) ); };' >> /etc/syslog-ng/syslog-ng.conf
#echo "log { source(from_all); destination(to_all); };" >> /etc/syslog-ng/syslog-ng.conf

cp ./rc.syslog-ng /etc/rc.d/rc.syslog-ng
chmod 755 /etc/rc.d/rc.syslog-ng
chmod 644 /etc/rc.d/rc.syslog
#cp ./rc.M /etc/rc.d/rc.M
echo "# Start the next generation system logger." >> /etc/rc.d/rc.M
echo "if [ -x /etc/rc.d/rc.syslog-ng ]; then" >> /etc/rc.d/rc.M
echo " . /etc/rc.d/rc.syslog-ng start " >> /etc/rc.d/rc.M
echo "fi" >> /etc/rc.d/rc.M
killall syslogd
killall syslog-ng
syslog-ng
#tar -zxvf ./Python-3.1.3.tgz
#cd ./Python-3.1.3
#./configure
#make
#make install
Войдите или зарегистрируйтесь, чтобы ответить.