| Предыдущая тема :: Следующая тема   | 
	
	
	
		| Автор | 
		Сообщение | 
	
	
		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" | 	 
  _________________ Хочу в Хогвардс преподавателем информатики. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		 |