powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Cron, странная проблема при перенаправлении вывода
25 сообщений из 30, страница 1 из 2
Cron, странная проблема при перенаправлении вывода
    #37388714
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня!

Вроде бы все банально... Простое задание
Код: plaintext
*/ 2  * * * * /usr/bin/php -f /path/to/folder/send_notifyes.php # 1 >/dev/null

Отлажено, результат работы скрипта присутствует каждую минуту, на почту приходят уведомления - в общем, красота. Теперь желаем отправить весь вывод скрипта в /dev/null, а в почте оставить только возможные сообщения об ошибках (stderr).

Убираю "#" - и скрипт перестает выполнять свою работу. Пробую отправить вывод в файл - файл создается, но остается пустым.

Та же строка с перенаправлением, будучи запущенной из консоли отрабатывает на ура.

ОС Дебиан - какая то смесь ленни и сквизи.
PHP 5.2.6-1+lenny9 with Suhosin-Patch 0.9.6.2 (cli) (built: Aug 4 2010 03:25:57)

Кто сталкивался, подскажите, что я делаю не так?
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37388752
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так?
Код: plaintext
*/ 2  * * * * /usr/bin/php -f /path/to/folder/send_notifyes.php >/dev/null
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37388769
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И так тоже
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37388939
Фотография basename
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так?

Код: plaintext
*/ 2  * * * * /usr/bin/php -f /path/to/folder/send_notifyes.php > /dev/null  2 >& 1 
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37389154
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И так нихт... Мне кажется, что тут не в синтаксисе проблемы. Разумеется, первым делом проверил различные варианты. Да и в кроне уже имеется куча перловых скриптов, которые прекрасно работают с направлением вида "1>/куда/нибудь".

Хм, совсем уж бредовая мысль: а не может ли это ">/dev/null" расцениваться php как непотребный аргумент? Но тогда не ясно, куда вываливаются ошибки.
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37389187
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Строки после этой в crontab тоже есть, эта не последняя.
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37389293
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crontab, случаем, не под виндой редактировали?
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37389319
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, банально, из консоли crontab -e. Редактор штатный - nano.
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37390319
Фотография basename
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня было, когда в консоли выполнялось, автоматом нет, переменные окружения. Но тут думаю вряд ли
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37391730
Meph1st0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleХм, совсем уж бредовая мысль: а не может ли это ">/dev/null" расцениваться php как непотребный аргумент? Но тогда не ясно, куда вываливаются ошибки.
Нет. Строка передаётся шелу (ЕМНИТ, /bin/sh, можно уточнить в man crontab), а шел однозначно воспримет ">/dev/null" как указание на перенаправления вывода, php даже не узнает этой части команды.

Касаемо странностей, ">/dev/null" однозначно убивает стандартный вывод. Если ошибки появляются при работе из крона, но не возникают при работе из оболочки, нужно копать в сторону различий в окружении (команда env в помощь)
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37391889
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно, переменные окружения разные. SHELL поменял с /bin/sh на /bin/bash. PATH тоже поправил. Не помогло. В переменную TERM прописать xterm или что другое? На USER, LOGNAME, LS_COLORS, LESSOPEN и LESSCLOSE вроде как не стоит обращать внимание, или я ошибаюсь? С остальными вроде ясно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37391964
Meph1st0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleДействительно, переменные окружения разные. SHELL поменял с /bin/sh на /bin/bash. PATH тоже поправил. Не помогло. В переменную TERM прописать xterm или что другое? На USER, LOGNAME, LS_COLORS, LESSOPEN и LESSCLOSE вроде как не стоит обращать внимание, или я ошибаюсь? С остальными вроде ясно.

SHELL, TERM и прочее не важны (если конечно в скрипте нет какой-нибудь экзотики), в первую очередь важен PATH. Касаемо USER, если пользователи разные, то отличаются и права доступа к файлам и директориям, не тут ли собака порылась?
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37391968
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, юзер в кроне и в консоли один и тот же.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37391972
Meph1st0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleНе, юзер в кроне и в консоли один и тот же.

Странно. Тогда трудно что-то сказать не зная природы ошибок.
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37393616
neznau
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkle,

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

попробуйте в кроне не указывать интерпретатор (/usr/bin/php -f), а просто вызвать скрипт (как в консоли), путь к интерпретатору - в первой строке скрипта...
возможно с параметрами путаница у крона выходит.
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37393674
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neznau,

С такого классического варианта и начинал, потом уже на вызов интерпретатора php непосредственно из крона переписал.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37393753
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уффф... Благодарю всех за попытки помочь. Кажется разобрался... Проблема пока не решена, но уже локализована, она оказалась зарыта глубже.

Дело в том, что в php-скрипте есть несколько строк кода, где проверяется, есть ли еще один экземпляр скрипта. Если есть еще один процесс - то работа данного экземпляра должна завершиться. Наличие лишнего процесса определяется просто по имени скрипта вот таким образом:

Код: plaintext
1.
2.
3.
 exec ('/usr/bin/pgrep -u username -f ' .  basename ( __FILE__ ),  $out, $r);
 if ( count ($out) >  1 ) {
     die ;
}


Так вот, разбирая подробно это место выяснил, что когда нет перенаправления вывода, то в списке процессов присутствует только один "/usr/bin/php /path/to/folder/send_notifyes.php". Но когда в кронтабе добавляю "1>/dev/null", то в списке вместе с первым появляется второй процесс "/bin/bash -c /path/to/folder/send_notifyes.php 1>/dev/null". Соответственно, скрипт видит два пида (точнее, две строчки в массиве $out) и благополучно помирает. Вот и получилось что скрипт работает не так как ожидалось.

Как это часто бывает, найденный ответ порождает новые вопросы.

Вопрос первый: почему так происходит?
Вопрос второй: каким образом сделать эту проверку правильно, так чтоб не было такой вот зависимости? Создание/удаление файла-флага или записи в БД не годится, к сожалению.
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37393803
Meph1st0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleВопрос первый: почему так происходит?
Потому что команду должен интерпретировать шел, вот cron и запускает шелл

vkleВопрос второй: каким образом сделать эту проверку правильно, так чтоб не было такой вот зависимости? Создание/удаление файла-флага или записи в БД не годится, к сожалению.
Наиболее правильный способ - лок-фай.
Код: plaintext
1.
2.
3.
4.
5.
6.
$fp =  fopen ($lockFile, "a")
 if  ( flock ($fp, LOCK_EX | LOCK_NB)) {
   Всё ОК, работаем.
}  else  {
   Запущена другая копия скрипта, завершаемся.
}
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37393827
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Meph1st0]vkleВопрос первый: почему так происходит?
Потому что команду должен интерпретировать шел, вот cron и запускает шелл

А когда нет перенаправления вывода - шелл не нужен и поэтому не запускается?
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37393854
neznau
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkleMeph1st0пропущено...

Потому что команду должен интерпретировать шел, вот cron и запускает шелл

А когда нет перенаправления вывода - шелл не нужен и поэтому не запускается?

если дело действительно в этом, то попробуйте обернуть ваш php-скрипт в sh-скрипт, и перенаправление делать там.
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37394230
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neznau,

>обернуть ваш php-скрипт в sh-скрипт

Ага, тоже об этом подумал, попробую.
Но все же хочется понять сам механизм - почему без перенаправления вывода нет или не видно второй строки в списке процессов.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37394266
Meph1st0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle, я конечно не в курсе ваших задач и возможно, по какой-то причине, файловые локи вам не подходят. Но для подавляющего большинства подобных задач это наиболее подходящий, простой и элегантный метод. В качестве бонуса можно использовать несколько независимых инстенсов приложения на одном сервере, которые не будут мешать друг другу, проверено на наших тестовых серверах :)
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37394275
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну... не подходят. Ребут сервера во время работы скрипта -> лок-файл остался старый -> после перезагрузки скрипт не работает пока ручками не прибьешь этот файл. Значить надо добавить еще задание на удаление лок-файла в том же кроне.

PS: те, кому достанется такое добро по наследству, наверняка спросят: "а сложнее нельзя было сделать?".
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37394299
Meph1st0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleНу... не подходят. Ребут сервера во время работы скрипта -> лок-файл остался старый -> после перезагрузки скрипт не работает пока ручками не прибьешь этот файл. Значить надо добавить еще задание на удаление лок-файла в том же кроне.
В том то и дело, что не остаётся. Суть не в файле, а в блокировке, которая гарантированно умирает вместе с процессом.

vklePS: те, кому достанется такое добро по наследству, наверняка спросят: "а сложнее нельзя было сделать?".
Хорошее, прозрачное решение. Явно лучше, чем городить костыли в виде обёрточного скрипта.
...
Рейтинг: 0 / 0
Cron, странная проблема при перенаправлении вывода
    #37394383
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Догнал, не сразу )) Да, это действительно правильнее. На работе в понедельник займусь.

Остался вопрос о втором процессе /bin/bash в зависимости от наличия/отсутствия перенаправления. Хочу понять, почему происходит так. Моих знаний на данный момент для этого видимо недостаточно. Это крон принимает решение, что нужно запустить процесс-оболочку и в нем выполнить запуск скрипта + еще что то, или хто другой? Другой - это может быть и шелл, прописанный в кронтабе и мож еще что то... Подозреваю, что основанием для принятия решения служит синтаксический анализ строки задания. Или я вообще не в ту сторону думаю?
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Cron, странная проблема при перенаправлении вывода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]