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

crontab (redirect stdout and stderr)

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



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

СообщениеДобавлено: Чт Фев 28 2008 16:29    Заголовок сообщения: crontab (redirect stdout and stderr) Ответить с цитатой

Как перенаправить stdio и stderr задачи которая запускается crontab?
Скрипт csh(си шельный), когда его запускаю непосредственно с терминала то stdio и stderr перенаправляются в файл, а когда этот же скрипт запускается crontab'ом, то весь вывод stdio и stderr присылается по почте, и не попадает log файл. В скрипте запускается wget.
скрипты:
Код:
#!/bin/csh
#script for crontab
0 2 * * * run_wget_script  2 >> nohup.out


run_wget_script
Код:
#!/bin/csh
#run wget script
nohup wget -i url_file &

Как сделать, чтоб stdio и stderr перенаправлялись под crontab и не попадали в почтовое уведомление, а попадали в >> log_file?
(как управлять содержимым почтового уведомления crontab? )
(FreeBSD)

Спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
VeL



Зарегистрирован: 18.01.2006
Сообщения: 521
Откуда: Харьков

СообщениеДобавлено: Чт Фев 28 2008 21:02    Заголовок сообщения: Re: crontab (redirect stdout and stderr) Ответить с цитатой

А если попробовать сделать что то похожее на:

скрипты:
Код:
#!/bin/csh
#script for crontab
0 2 * * * run_wget_script


run_wget_script
Код:
#!/bin/csh
#run wget script
nohup wget -i url_file 2 >> nohup.out &


Работать будет интересно?
_________________
Best regards
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
atlantic



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

СообщениеДобавлено: Чт Фев 28 2008 22:32    Заголовок сообщения: Re: crontab (redirect stdout and stderr) Ответить с цитатой

VeL писал(а):
А если попробовать сделать что то похожее на:

run_wget_script
Код:
#!/bin/csh
#run wget script
nohup wget -i url_file 2 >> nohup.out &


Работать будет интересно?

wget воспримет 2 как параметр, перенаправления для crontab не получится, да и команда nohup ..&, предполагает по умолчанию перенаправление в nohup.out
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Andrew Grekhov



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

СообщениеДобавлено: Пт Фев 29 2008 06:54    Заголовок сообщения: Re: crontab (redirect stdout and stderr) Ответить с цитатой

Код:
#!/bin/csh
#run wget script
nohup wget -i url_file 2 >> nohup.out &


Зачем нужен "nohup"?

А чем не нравится:
Код:

wget -b -i url_file -o log
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
and3008



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

СообщениеДобавлено: Пт Фев 29 2008 08:07    Заголовок сообщения: Ответить с цитатой

Давайте я поясню.

Набираем man bash и читаем раздел REDIRECTION

Там описано как осуществлять перенаправление потоков ввода, вывода и вывода потока ошибок. Каждому потоку присваетсся цифра (дескриптор).
0 - всегда относится к потоку ввода (stdin)
1 - всегда к потоку вывода (stdout)
2 - всегда к потоку ошибок (stderr)

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

Вот как это делать надо:

0 2 * * * run_wget_script 1>>nohup.out 2>&1
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
and3008



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

СообщениеДобавлено: Пт Фев 29 2008 08:17    Заголовок сообщения: Ответить с цитатой

Про nohup:

Эта прога позволяет запустить скрипт или ПО и "оторвать" его от пользовательского терминала. Софт или скрипт будет продолжать выполняться даже если закрыть сессию SSH или даже консоль.

При запуске из crontab все и так запускается без привязки к терминалу. Поэтому применять в crontab-е nohup не имеет никакого смысла.

Еще раз, кто не понял. Поключаясь к терминалу запускается bash (sh, tcsh, ksh). Запуская из терминала ваши команды система ставит их в зависимость от того, откуда она была запущена. bash является родителем этих процессов. Если закрыть (убить) ваш процесс bash, то система уничтожит и все процессы, которые он породил.

nohup позволяет "оторвать" эту зависимость. Процесс пускается в "свободное" плаванье и становится независимым от родителя процессом. Или с точки зрения системы он такой же, как и ftpd, named, sshd...

Понятно о чем я?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
atlantic



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

СообщениеДобавлено: Пт Фев 29 2008 09:02    Заголовок сообщения: Ответить с цитатой

and3008 писал(а):
Про nohup:

Эта прога позволяет запустить скрипт или ПО и "оторвать" его от пользовательского терминала. Софт или скрипт будет продолжать выполняться даже если закрыть сессию SSH или даже консоль.

При запуске из crontab все и так запускается без привязки к терминалу. Поэтому применять в crontab-е nohup не имеет никакого смысла.

Еще раз, кто не понял. Поключаясь к терминалу запускается bash (sh, tcsh, ksh). Запуская из терминала ваши команды система ставит их в зависимость от того, откуда она была запущена. bash является родителем этих процессов. Если закрыть (убить) ваш процесс bash, то система уничтожит и все процессы, которые он породил.

nohup позволяет "оторвать" эту зависимость. Процесс пускается в "свободное" плаванье и становится независимым от родителя процессом. Или с точки зрения системы он такой же, как и ftpd, named, sshd...

Понятно о чем я?

Конечно понятно, явно непонятно о чем я :).
У меня есть скрипт с nohup, где wget запускается, часто запускаю я его с терминала(потом выхожу), этот скрипт меня полностью устраивает(перенаправляется весь лог в файл за счет nohup), я добавил еще crontab скрипт который запускает этот скрипт (зачем плодить еще скрипт, хочется использовать то, что уже работает ). А crontab перехватывает stdio stderr и не дает их nohup. Весь лог присылается письмом crontab, лог бывает большой, хочется сделать чтоб crontab присылал только уведомление, о том что задание запустил(например с логом 0/1 успешно/ошибка)), а не "забирал" stdio stderr у nohup, тем более, что копия лога crona должна быть еще
/var/log/cron.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
atlantic



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

СообщениеДобавлено: Пт Фев 29 2008 10:55    Заголовок сообщения: Ответить с цитатой

and3008 писал(а):
Давайте я поясню.
...(skipped)
Вот как это делать надо:

0 2 * * * run_wget_script 1>>nohup.out 2>&1


попробывал я так , ругается cron(вернее это си-шелл ) :
Код:
Ambiguous output redirect.

ну и далее вываливается, и скрипт не запускает.
( кажется такая запись (2>&1) катит только для /bin/sh
а си-шелл такого не понимает)

---
добавлено:

так как си шелл не понимает (2>&1)
пришлось делать так:
Код:
echo "run_wget_script  >>nohup.out   2>&1" |sh

криво конечно, но как-то работает(добавляется в nohup.out)


Последний раз редактировалось: atlantic (Пт Фев 29 2008 12:32), всего редактировалось 3 раз(а)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
and3008



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

СообщениеДобавлено: Пт Фев 29 2008 11:38    Заголовок сообщения: Ответить с цитатой

Покажите сюда результат команды env
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
atlantic



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

СообщениеДобавлено: Пт Фев 29 2008 11:53    Заголовок сообщения: Ответить с цитатой

and3008 писал(а):
Покажите сюда результат команды env

какая переменная интересует?(а то там много лишнего)

p.s.
я и использовал си-шелл, потому- что это мой логин-шел, там в .cshrc прописаны все пути настройки итд, а в .shrc обычно "фонарь"

еще раз проверил, вроде cron больше не присылает stderr
помогло так:
echo "run_wget_script >>nohup.out 2>&1" |sh

интересно, а как в си-шелл сделать 2>&1 , или там такое не катит?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
and3008



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

СообщениеДобавлено: Пт Фев 29 2008 20:18    Заголовок сообщения: Ответить с цитатой

Ну а что за версия UNIX у вас?

sh от Linux, Solaris, FreeBSD, Tru64 имеют отличия.

В env интересовала переменная SHELL.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
atlantic



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

СообщениеДобавлено: Пт Фев 29 2008 22:46    Заголовок сообщения: Ответить с цитатой

and3008 писал(а):
Ну а что за версия UNIX у вас?

sh от Linux, Solaris, FreeBSD, Tru64 имеют отличия.

В env интересовала переменная SHELL.

да вроде писал в самом первом посте, уточняю:
FreeBSD 6.3-PRERELEASE (SPIRIT)
а си-шелл(в котором работаю)
> tcsh --version
tcsh 6.14.00 (Astron)
options wide,nls,dl,al,kan,rh,color,filec

а насчет sh: у него бывает версия?(если да, то как посмотреть?)
в man'е на sh:
DESCRIPTION
The sh utility is the standard command interpreter for the system. The
current version of sh is in the process of being changed to conform with
the IEEE Std 1003.2 (``POSIX.2'') specification for the shell. This ver-
sion has many features which make it appear similar in some respects to
the Korn shell, but it is not a Korn shell clone like pdksh. Only fea-
tures designated by POSIX, plus a few Berkeley extensions, are being
incorporated into this shell. This man page is not intended to be a
tutorial nor a complete specification of the shell.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
and3008



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

СообщениеДобавлено: Сб Мар 01 2008 09:26    Заголовок сообщения: Ответить с цитатой

Рецепт из книжки "UNIX: The Complete Reference, Second Edition".

В bash, sh, ksh перенаправление потока ошибок в стандартный поток вывода делается конструкцией 2>&1

В csh, tcsh такой фокус не проходит. Файл для потока ошибок и файл для стандартного вывода должны быть разными файлами.

Пример:
(ls -l > /dev/tty) >& errorfile

stdout вывалится в консоль, а ошибки в файл errorfile

Однако если почитать документацию, то можно подумать, что можно сделать финт ушами. Типа так:
(ls -l > myfile) >>& myfile

Опасность сего поведения в том, что если пойдут сперва ошибки, то они запишутся в файл, а вот попытка создать файл для потока вывода окончится неудачно и команда не выполнится. Это мое IMHO, я его не проверял. Кому интересно, проверьте.

Когда-то давным давно оболочка у UNIX-ов была одна и называлась наверно sh. Потом любимые shell-ы стали отличаться. Но чтобы не путаться в системе всегда имется симлинк sh -> любимый шелл.
В Linux это bash, в Tru64 это ksh, в BSD это tcsh.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> 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
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...