Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
tatlink
Зарегистрирован: 19.05.2005 Сообщения: 361 Откуда: Уфа
|
Добавлено: Вт Мар 20 2007 07:38 Заголовок сообщения: cron |
|
|
необходимо запускать две команды каждое утро..
скажем эти
#/usr/sbin/squid -k rotate
# /usr/bin/sarg
знаю ключевое слово cron но победить его пока не могу.. _________________ Хочешь знать правду? Читай таблицу умножения. |
|
Вернуться к началу |
|
|
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Вт Мар 20 2007 08:52 Заголовок сообщения: |
|
|
man crontab ниасилил что ли? |
|
Вернуться к началу |
|
|
tatlink
Зарегистрирован: 19.05.2005 Сообщения: 361 Откуда: Уфа
|
Добавлено: Вт Мар 20 2007 08:55 Заголовок сообщения: |
|
|
and3008 писал(а): | man crontab ниасилил что ли? |
скорее поленился.... _________________ Хочешь знать правду? Читай таблицу умножения. |
|
Вернуться к началу |
|
|
tatlink
Зарегистрирован: 19.05.2005 Сообщения: 361 Откуда: Уфа
|
Добавлено: Вт Мар 20 2007 09:19 Заголовок сообщения: |
|
|
Ну вобщем у меня получилось так:
файл crontab имеет следующий вид
........
........
01 0 * * * root /usr/sbin/squid -k rotate
02 0 * * * root /usr/bin/sarg
если я не прав исправте меня _________________ Хочешь знать правду? Читай таблицу умножения. |
|
Вернуться к началу |
|
|
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Вт Мар 20 2007 09:54 Заголовок сообщения: |
|
|
Ротацию и анализ файлов надо делать последовательно.
А у тебя процессы запускаются параллельно с разносом по времени. Т.е. ты заботливо разложил сам себе грабли.
Ты на них наступишь, если ротация логов задержится более чем на минуту, а sag начнет парсить непойми чего.
Сделай один файл. В котором пропиши ротацию логов на squid, если squid не вернул ошибку, то запуск sarg.
И вот этот скриптик в crontab и ставь. Тогда будет работать всегда правильно и без граблей. |
|
Вернуться к началу |
|
|
tatlink
Зарегистрирован: 19.05.2005 Сообщения: 361 Откуда: Уфа
|
Добавлено: Вт Мар 20 2007 10:12 Заголовок сообщения: |
|
|
and3008 писал(а): | Ротацию и анализ файлов надо делать последовательно.
А у тебя процессы запускаются параллельно с разносом по времени. Т.е. ты заботливо разложил сам себе грабли.
Ты на них наступишь, если ротация логов задержится более чем на минуту, а sag начнет парсить непойми чего.
Сделай один файл. В котором пропиши ротацию логов на squid, если squid не вернул ошибку, то запуск sarg.
И вот этот скриптик в crontab и ставь. Тогда будет работать всегда правильно и без граблей. |
как в скрипте уловить факт ОШИБКИ ротации логов сквида? _________________ Хочешь знать правду? Читай таблицу умножения. |
|
Вернуться к началу |
|
|
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Вт Мар 20 2007 17:58 Заголовок сообщения: |
|
|
Код возврата анализируй.
В MS DOS это ERRORLEVEL, в bash - это переменная $? |
|
Вернуться к началу |
|
|
alex2007
Зарегистрирован: 15.12.2006 Сообщения: 19
|
Добавлено: Ср Мар 21 2007 17:53 Заголовок сообщения: |
|
|
and3008 писал(а): | Код возврата анализируй.
В MS DOS это ERRORLEVEL, в bash - это переменная $? |
И мне интересно - только точнее, какТОЧНО уловить код возврата ошибки ротации squid? |
|
Вернуться к началу |
|
|
crash
Зарегистрирован: 02.11.2001 Сообщения: 1836 Откуда: Бердск
|
Добавлено: Чт Мар 22 2007 02:09 Заголовок сообщения: |
|
|
alex2007 писал(а): | and3008 писал(а): | Код возврата анализируй.
В MS DOS это ERRORLEVEL, в bash - это переменная $? |
И мне интересно - только точнее, какТОЧНО уловить код возврата ошибки ротации squid? |
после выполнения команды ротации проверяете чему равна переменная $?, если 0 (нуль) то все пучком и идем дальше. |
|
Вернуться к началу |
|
|
alex2007
Зарегистрирован: 15.12.2006 Сообщения: 19
|
Добавлено: Чт Мар 22 2007 09:10 Заголовок сообщения: |
|
|
странно...а если в данном случае ротация не последняя выполненная команда, тогда что мне даст эта переменная?? И как точно узнать последнюю выполненную команду? Может после нее была уже выполнена какая то системная команда? |
|
Вернуться к началу |
|
|
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Чт Мар 22 2007 17:14 Заголовок сообщения: |
|
|
Не парьте мозги общественности.
squid - это программа такая, а не команда или скрипт.
squid -k rotate заставляет сам squid выполнить ротацию логов. Это его базовое умение.
Пример:
squid -k rotate
if [ $? -eq 0 ]; then
/usr/bin/sarg
else
beep
beep
beep
echo `date` " ERROR squid rotate logs!!!" >> /var/log/messages
fi |
|
Вернуться к началу |
|
|
alex2007
Зарегистрирован: 15.12.2006 Сообщения: 19
|
Добавлено: Чт Мар 22 2007 17:20 Заголовок сообщения: |
|
|
любая программа для системы - это набор команд и сквид не исключение. И если он не уложится, то вы получите в возвращаемом параметре Бог весть что..причем это "что-то" может и к сквиду не иметь никакого отношения. |
|
Вернуться к началу |
|
|
alex2007
Зарегистрирован: 15.12.2006 Сообщения: 19
|
Добавлено: Чт Мар 22 2007 17:24 Заголовок сообщения: |
|
|
кстати - and3008 вы знаете сколько времени сквид делает ротацию? Не доли секунды...Вы же сами говорили о подобных граблях...вот и начнет сарж парсить в вашем скрипте не знамо что....еще и ротация закончиться не успеет...
так и будет по вашему скрипту только одни beep
Привожу ваши же слова "and3008 писал(а):
Ротацию и анализ файлов надо делать последовательно.
А у тебя процессы запускаются параллельно с разносом по времени. Т.е. ты заботливо разложил сам себе грабли.
Ты на них наступишь, если ротация логов задержится более чем на минуту, а sag начнет парсить непойми чего. "
Так что простите это вы парите мозги общественности нерабочим скриптом
Кстати, если ротация не пройдет - сквид сам напишет это в логи - не надо дополнительно это писать в скрипте |
|
Вернуться к началу |
|
|
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Чт Мар 22 2007 19:52 Заголовок сообщения: |
|
|
Пример как делать не надо:
--------------
Содержимое crontab:
01 0 * * * root /usr/sbin/squid -k rotate
02 0 * * * root /usr/bin/sarg
---------------
Пример как делать надо:
-------------------
1. Делаем файл my_script, его содержимое:
#!/bin/bash
squid -k rotate
if [ $? -eq 0 ]; then
/usr/bin/sarg
else
beep
beep
beep
echo `date` " ERROR squid rotate logs!!!" >> /var/log/messages
fi
2. Ставим в crontab:
01 0 * * * root /какой-то/каталог/my_script
------------------
ВСЕ!
cron запускает выполнение файлов по расписанию. Ему по фигу что делают эти файлы. У него в crontab расписание составлено и вперед.
Автор вопроса озадачился проблемой как выполнить ротацию логов их последующий анализ. Предложил решение.
Я указал на ошибку. Ошибка в том, что он запускает зависимые друг от друга процессы почти параллельно и предложил запускать их последовательно. Скрипты я привел.
Что не понятного? |
|
Вернуться к началу |
|
|
alex2007
Зарегистрирован: 15.12.2006 Сообщения: 19
|
Добавлено: Пт Мар 23 2007 09:43 Заголовок сообщения: |
|
|
Так то и непонятно, что ваш скрипт не "почти", а практически одновременно запускает эти два процесса - ротацию сквида и парсинг лога. Те - вы ошибаетесь еще больше в той ошибке, на которую сами же и указали автору поста.
Если после команды squid -k rotate значение $? будет отлично от 0 (не успел еще закончить ротацию сквид, не успел еще просто и все), то мы получаем по вашему скрипту кучу "beep " и запись в лог об ошибке (хотя я написал, что сквид и ТАК напишет об ошибке если она будет - это лишние строки). В результате что имеем на выходе? Ротация прошла успешно, но парсинг НЕ сделан и записано сообщение об ошибке, которой небыло. А небыло ее потому, что на момент проверки переменной $? сквид попросту еще не успел закончить ротацию и перемннная НЕ стала равна нулю.... и по вашему скрипту это переход на beep и запись об ошибке - вот о чем я уважаемый and3008. |
|
Вернуться к началу |
|
|
4e6
Зарегистрирован: 09.01.2006 Сообщения: 92 Откуда: Москва
|
Добавлено: Пт Мар 23 2007 11:10 Заголовок сообщения: |
|
|
Пока не закончится выполнение команды squid -k rotate скрипт дальше выполняться не будет. _________________
|
|
Вернуться к началу |
|
|
alex2007
Зарегистрирован: 15.12.2006 Сообщения: 19
|
Добавлено: Пт Мар 23 2007 12:15 Заголовок сообщения: |
|
|
да что вы говорите? А если команда аварийно завершится? У меня такое было и не раз. Ошибка связана с тем, что не получается убить процессы..
в любом случае правильнее было бы тогда (в случае неверного завершения команды) все же завершить процессы сквида и опять сделать ротацию и вернуться к основной теме - созданию отчета по логам. Ведь это главная задача, а не дублирование записи об ошибке в логи |
|
Вернуться к началу |
|
|
crash
Зарегистрирован: 02.11.2001 Сообщения: 1836 Откуда: Бердск
|
Добавлено: Сб Мар 24 2007 07:10 Заголовок сообщения: |
|
|
alex2007 писал(а): | да что вы говорите? А если команда аварийно завершится? У меня такое было и не раз. Ошибка связана с тем, что не получается убить процессы..
в любом случае правильнее было бы тогда (в случае неверного завершения команды) все же завершить процессы сквида и опять сделать ротацию и вернуться к основной теме - созданию отчета по логам. Ведь это главная задача, а не дублирование записи об ошибке в логи |
попросили совета, его дали. Написали правильный скрипт. Если вы считаете, что это не правильно, так вы предложите свой вариант скрипта. |
|
Вернуться к началу |
|
|
C37
Зарегистрирован: 09.03.2005 Сообщения: 311
|
Добавлено: Вс Мар 25 2007 16:37 Заголовок сообщения: |
|
|
В примере and3008 анализ переменной не произойдет до тех пор, пока не завершится процесс squid. Если он аварийно умрет, в $? будет не 0, тогда в дело вступит if ... then, куда можно написать все, что нужно |
|
Вернуться к началу |
|
|
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Вс Мар 25 2007 19:01 Заголовок сообщения: |
|
|
Параноики могу применить более изощренные методы проверки.
Например перед ротацией логов запомнить дату создания файла access.log
После squid -k rotate опять взять дату создания файла access.log и сравнить с предыдущей. Новая дата будет больше, если все хорошо. Если ротация логов не произошла, то даты будут равны.
Второй или доп. способ - учитывать размер файла assess.log.
Кардинальный способ:
Вместо squid -k rotate сделать так:
killall -9 squid
killall -9 squid
killall -9 squid
mv access.log /other/catalog/access.log
service squid start
Но это для совсем уже клинических случаев... |
|
Вернуться к началу |
|
|
alex2007
Зарегистрирован: 15.12.2006 Сообщения: 19
|
Добавлено: Пн Мар 26 2007 11:23 Заголовок сообщения: |
|
|
ну хоть признал, что не все так гладко как первый раз написал |
|
Вернуться к началу |
|
|
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Пн Мар 26 2007 22:06 Заголовок сообщения: |
|
|
Предлагается не пытаться меня уколоть или зацепить, а выдавать реальные примеры.
Не ошибается тот, кто ничего не делает. |
|
Вернуться к началу |
|
|
crash
Зарегистрирован: 02.11.2001 Сообщения: 1836 Откуда: Бердск
|
Добавлено: Вт Мар 27 2007 01:34 Заголовок сообщения: |
|
|
alex2007 писал(а): | ну хоть признал, что не все так гладко как первый раз написал |
получается вы параноик и у вас только клинические случаи |
|
Вернуться к началу |
|
|
alxg
Зарегистрирован: 02.04.2007 Сообщения: 1
|
Добавлено: Пн Апр 02 2007 06:37 Заголовок сообщения: Я с sarg перешел на free-sa |
|
|
#!/bin/bash
D=$(date --date "1 day ago" +%d.%m.%Y)
/usr/local/free-sa/bin/free-sa -r -d $D-$D
exit 0
Сам удаляет записи из лога squid. |
|
Вернуться к началу |
|
|
seres
Зарегистрирован: 02.04.2007 Сообщения: 1
|
Добавлено: Пн Апр 02 2007 09:43 Заголовок сообщения: |
|
|
pojaluista pomogite s failom crontab v freebsd!!!...
Vmesto tavo ctob on cajduiu minutu vivodil "privet"
on vivodit cajduiu minutu
Apr 2 14:41:00 sendmail [1050] :unable to qualified host name (home) unknow: sleeping for retry
A esli udaliu fail to vseo ostanavlivaetsa, (DNS reshaetsea). |
|
Вернуться к началу |
|
|
критикан
Зарегистрирован: 18.02.2005 Сообщения: 247
|
Добавлено: Вт Апр 17 2007 11:17 Заголовок сообщения: если юникс что-то не умеет делать, значит, вам это не нужно |
|
|
а нельзя обойтись таким:
--------------
Содержимое crontab:
01 0 * * * root /usr/sbin/squid -k rotate && /usr/bin/sarg
---------------
?
Тогда отпадут (небудуговоритькакие) вопросы (некоторыхтоварищей) о том, закончится выполнение первой команды до запуска второй или нет
------------------------
если юникс что-то не умеет делать, значит, вам это не нужно |
|
Вернуться к началу |
|
|
Dmitry_Karpov
Зарегистрирован: 23.02.2006 Сообщения: 212 Откуда: Москва, Матвеевское
|
Добавлено: Вс Апр 29 2007 18:51 Заголовок сообщения: |
|
|
[QUOTE=and3008]Сделай один файл. В котором пропиши ротацию логов на squid, если squid не вернул ошибку, то запуск sarg.[/QUOTE] Для FreeBSD это файл /etc/dayly.local; и запускается он сам по себе (точнее, через cron и тучу промежуточных скриптов) каждую ночь (время посмотри в /etc/crontab).
[QUOTE=tatlink]как в скрипте уловить факт ОШИБКИ ротации логов сквида?[/QUOTE] Смотря что ты хочешь сделать в зависимости от ошибки. Например, можно так: Код: | usr/sbin/squid -k rotate && /usr/bin/sarg | - sarg запустится только если squid отработал нормально. А сообщения об ошибках в любом случае пойдут на E-mail локальному руту.
Можно использовать переменную окружения "$?"; если сразу же по выполнении команды, то напрямую; а если потом, то можно переписать её значение в любую переменную.
[QUOTE=alex2007]сколько времени сквид делает ротацию?[/QUOTE] Зависит много от чего. IMHO, не так уж много - он же только переименовывает файлы. Если файловая система с SoftUpdates, а логов мало - то быстро.
[QUOTE=and3008]Пример как делать надо:
-------------------
1. Делаем файл my_script, его содержимое:
#!/bin/bash
squid -k rotate
if [ $? -eq 0 ]; then
/usr/bin/sarg
else
beep
beep
beep
echo `date` " ERROR squid rotate logs!!!" >> /var/log/messages
fi[/QUOTE] Так делать тоже не надо. Для начала надо выделить код тэгом {CODE} (в квадратных скобках). Вместо if надо использовать case - отпадает нужда в запуске программы [ (это - реальная программа, ли\нк к программе test). И наконец, записи в логи надо делать не напрямую, а через syslogd.
[QUOTE=alex2007]ваш скрипт не "почти", а практически одновременно запускает эти два процесса - ротацию сквида и парсинг лога.[/QUOTE] Бред. С какой это радости скрипт запустит два процесса одновременно, если там нет одинокого амперсенда? Сначала закончится выполнение 'squid -k rotate', и только потом будет обрабатываться то, что после него.
Цитата: | А если команда аварийно завершится? | Значит, она завершится. Хотя и аварийно. На этот случай предусмотрена обработка кода завершения.
В исходном варианте аварийное завершение ротации никак не обрабатывалось.
Цитата: | Ошибка связана с тем, что не получается убить процессы. | Зачем их убивать, злыдень?
Цитата: | правильнее было бы все же завершить процессы сквида и опять сделать ротацию | Ничего не понял. Зачем завершать процесы Сквида? И какие основания думать, что если первый раз не удалось провести ротацию файлов, то в следкющий раз получится?
[QUOTE=and3008]Кардинальный способ:
Вместо squid -k rotate сделать так:
killall -9 squid
killall -9 squid
killall -9 squid
mv access.log /other/catalog/access.log
service squid start
Но это для совсем уже клинических случаев...[/QUOTE] Вот именно - для совершенно клинических случаев.
[QUOTE=alex2007]ну хоть признал, что не все так гладко как первый раз написал[/QUOTE] Никто не гарантирует, что всё всегда будет гладко. Но есть тех.задание, в котором указывается, какие случаи/ситуации/события надо предусмотреть.
[QUOTE=seres]unable to qualified host name (home) unknow[/QUOTE] В /etc/rc.conf д.б. строка типа Код: | hostname="host.firma.ru" |
_________________ Хочу в Хогвардс преподавателем информатики. |
|
Вернуться к началу |
|
|
|