Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

cron

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Unix
Предыдущая тема :: Следующая тема  
Автор Сообщение
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


если я не прав исправте меня Smile
_________________
Хочешь знать правду? Читай таблицу умножения.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
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    Заголовок сообщения: Ответить с цитатой

странно...а если в данном случае ротация не последняя выполненная команда, тогда что мне даст эта переменная?? Smile И как точно узнать последнюю выполненную команду? Может после нее была уже выполнена какая то системная команда?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
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 вы знаете сколько времени сквид делает ротацию? Не доли секунды...Вы же сами говорили о подобных граблях...вот и начнет сарж парсить в вашем скрипте не знамо что....еще и ротация закончиться не успеет... Smile
так и будет по вашему скрипту только одни beep Smile
Привожу ваши же слова Smile "and3008 писал(а):
Ротацию и анализ файлов надо делать последовательно.
А у тебя процессы запускаются параллельно с разносом по времени. Т.е. ты заботливо разложил сам себе грабли.

Ты на них наступишь, если ротация логов задержится более чем на минуту, а sag начнет парсить непойми чего. "
Так что простите это вы парите мозги общественности нерабочим скриптом Laughing
Кстати, если ротация не пройдет - сквид сам напишет это в логи - не надо дополнительно это писать в скрипте Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
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    Заголовок сообщения: Ответить с цитатой

да что вы говорите? А если команда аварийно завершится? У меня такое было и не раз. Ошибка связана с тем, что не получается убить процессы..
в любом случае правильнее было бы тогда (в случае неверного завершения команды) все же завершить процессы сквида и опять сделать ротацию и вернуться к основной теме - созданию отчета по логам. Ведь это главная задача, а не дублирование записи об ошибке в логи Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
crash



Зарегистрирован: 02.11.2001
Сообщения: 1836
Откуда: Бердск

СообщениеДобавлено: Сб Мар 24 2007 07:10    Заголовок сообщения: Ответить с цитатой

alex2007 писал(а):
да что вы говорите? А если команда аварийно завершится? У меня такое было и не раз. Ошибка связана с тем, что не получается убить процессы..
в любом случае правильнее было бы тогда (в случае неверного завершения команды) все же завершить процессы сквида и опять сделать ротацию и вернуться к основной теме - созданию отчета по логам. Ведь это главная задача, а не дублирование записи об ошибке в логи Smile

попросили совета, его дали. Написали правильный скрипт. Если вы считаете, что это не правильно, так вы предложите свой вариант скрипта.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
C37



Зарегистрирован: 09.03.2005
Сообщения: 311

СообщениеДобавлено: Вс Мар 25 2007 16:37    Заголовок сообщения: Ответить с цитатой

В примере and3008 анализ переменной не произойдет до тех пор, пока не завершится процесс squid. Если он аварийно умрет, в $? будет не 0, тогда в дело вступит if ... then, куда можно написать все, что нужно Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
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    Заголовок сообщения: Ответить с цитатой

ну хоть признал, что не все так гладко как первый раз написал Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
and3008



Зарегистрирован: 12.10.2001
Сообщения: 14893
Откуда: Н.Новгород

СообщениеДобавлено: Пн Мар 26 2007 22:06    Заголовок сообщения: Ответить с цитатой

Предлагается не пытаться меня уколоть или зацепить, а выдавать реальные примеры.

Не ошибается тот, кто ничего не делает.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
crash



Зарегистрирован: 02.11.2001
Сообщения: 1836
Откуда: Бердск

СообщениеДобавлено: Вт Мар 27 2007 01:34    Заголовок сообщения: Ответить с цитатой

alex2007 писал(а):
ну хоть признал, что не все так гладко как первый раз написал Smile

получается вы параноик и у вас только клинические случаи
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
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', и только потом будет обрабатываться то, что после него.

Цитата:
А если команда аварийно завершится?
Значит, она завершится. Хотя и аварийно. На этот случай предусмотрена обработка кода завершения.
В исходном варианте аварийное завершение ротации никак не обрабатывалось.

Цитата:
Ошибка связана с тем, что не получается убить процессы.
Зачем их убивать, злыдень? Smile

Цитата:
правильнее было бы все же завершить процессы сквида и опять сделать ротацию
Ничего не понял. Зачем завершать процесы Сквида? И какие основания думать, что если первый раз не удалось провести ротацию файлов, то в следкющий раз получится?

[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"

_________________
Хочу в Хогвардс преподавателем информатики.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Unix Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...