|
|
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
Доброго дня! Вроде бы все банально... Простое задание Код: plaintext Отлажено, результат работы скрипта присутствует каждую минуту, на почту приходят уведомления - в общем, красота. Теперь желаем отправить весь вывод скрипта в /dev/null, а в почте оставить только возможные сообщения об ошибках (stderr). Убираю "#" - и скрипт перестает выполнять свою работу. Пробую отправить вывод в файл - файл создается, но остается пустым. Та же строка с перенаправлением, будучи запущенной из консоли отрабатывает на ура. ОС Дебиан - какая то смесь ленни и сквизи. PHP 5.2.6-1+lenny9 with Suhosin-Patch 0.9.6.2 (cli) (built: Aug 4 2010 03:25:57) Кто сталкивался, подскажите, что я делаю не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 11:57 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
а так? Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 12:06 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
И так тоже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 12:12 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
а так? Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 13:09 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
И так нихт... Мне кажется, что тут не в синтаксисе проблемы. Разумеется, первым делом проверил различные варианты. Да и в кроне уже имеется куча перловых скриптов, которые прекрасно работают с направлением вида "1>/куда/нибудь". Хм, совсем уж бредовая мысль: а не может ли это ">/dev/null" расцениваться php как непотребный аргумент? Но тогда не ясно, куда вываливаются ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 14:19 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
Строки после этой в crontab тоже есть, эта не последняя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 14:31 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
crontab, случаем, не под виндой редактировали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 15:00 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
Не, банально, из консоли crontab -e. Редактор штатный - nano. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 15:09 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
У меня было, когда в консоли выполнялось, автоматом нет, переменные окружения. Но тут думаю вряд ли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2011, 08:00 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
vkleХм, совсем уж бредовая мысль: а не может ли это ">/dev/null" расцениваться php как непотребный аргумент? Но тогда не ясно, куда вываливаются ошибки. Нет. Строка передаётся шелу (ЕМНИТ, /bin/sh, можно уточнить в man crontab), а шел однозначно воспримет ">/dev/null" как указание на перенаправления вывода, php даже не узнает этой части команды. Касаемо странностей, ">/dev/null" однозначно убивает стандартный вывод. Если ошибки появляются при работе из крона, но не возникают при работе из оболочки, нужно копать в сторону различий в окружении (команда env в помощь) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2011, 20:45 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
Действительно, переменные окружения разные. SHELL поменял с /bin/sh на /bin/bash. PATH тоже поправил. Не помогло. В переменную TERM прописать xterm или что другое? На USER, LOGNAME, LS_COLORS, LESSOPEN и LESSCLOSE вроде как не стоит обращать внимание, или я ошибаюсь? С остальными вроде ясно. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2011, 01:42 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
vkleДействительно, переменные окружения разные. SHELL поменял с /bin/sh на /bin/bash. PATH тоже поправил. Не помогло. В переменную TERM прописать xterm или что другое? На USER, LOGNAME, LS_COLORS, LESSOPEN и LESSCLOSE вроде как не стоит обращать внимание, или я ошибаюсь? С остальными вроде ясно. SHELL, TERM и прочее не важны (если конечно в скрипте нет какой-нибудь экзотики), в первую очередь важен PATH. Касаемо USER, если пользователи разные, то отличаются и права доступа к файлам и директориям, не тут ли собака порылась? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2011, 07:38 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
Не, юзер в кроне и в консоли один и тот же. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2011, 07:40 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
vkleНе, юзер в кроне и в консоли один и тот же. Странно. Тогда трудно что-то сказать не зная природы ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2011, 07:49 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
vkle, вариант может показаться странным но мало ли...вдруг поможет попробуйте в кроне не указывать интерпретатор (/usr/bin/php -f), а просто вызвать скрипт (как в консоли), путь к интерпретатору - в первой строке скрипта... возможно с параметрами путаница у крона выходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2011, 22:57 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
neznau, С такого классического варианта и начинал, потом уже на вызов интерпретатора php непосредственно из крона переписал. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2011, 23:49 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
Уффф... Благодарю всех за попытки помочь. Кажется разобрался... Проблема пока не решена, но уже локализована, она оказалась зарыта глубже. Дело в том, что в php-скрипте есть несколько строк кода, где проверяется, есть ли еще один экземпляр скрипта. Если есть еще один процесс - то работа данного экземпляра должна завершиться. Наличие лишнего процесса определяется просто по имени скрипта вот таким образом: Код: plaintext 1. 2. 3. Так вот, разбирая подробно это место выяснил, что когда нет перенаправления вывода, то в списке процессов присутствует только один "/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) и благополучно помирает. Вот и получилось что скрипт работает не так как ожидалось. Как это часто бывает, найденный ответ порождает новые вопросы. Вопрос первый: почему так происходит? Вопрос второй: каким образом сделать эту проверку правильно, так чтоб не было такой вот зависимости? Создание/удаление файла-флага или записи в БД не годится, к сожалению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2011, 02:05 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
vkleВопрос первый: почему так происходит? Потому что команду должен интерпретировать шел, вот cron и запускает шелл vkleВопрос второй: каким образом сделать эту проверку правильно, так чтоб не было такой вот зависимости? Создание/удаление файла-флага или записи в БД не годится, к сожалению. Наиболее правильный способ - лок-фай. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2011, 08:14 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
[quot Meph1st0]vkleВопрос первый: почему так происходит? Потому что команду должен интерпретировать шел, вот cron и запускает шелл А когда нет перенаправления вывода - шелл не нужен и поэтому не запускается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2011, 09:56 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
vkleMeph1st0пропущено... Потому что команду должен интерпретировать шел, вот cron и запускает шелл А когда нет перенаправления вывода - шелл не нужен и поэтому не запускается? если дело действительно в этом, то попробуйте обернуть ваш php-скрипт в sh-скрипт, и перенаправление делать там. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2011, 11:40 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
neznau, >обернуть ваш php-скрипт в sh-скрипт Ага, тоже об этом подумал, попробую. Но все же хочется понять сам механизм - почему без перенаправления вывода нет или не видно второй строки в списке процессов. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2011, 22:00 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
vkle, я конечно не в курсе ваших задач и возможно, по какой-то причине, файловые локи вам не подходят. Но для подавляющего большинства подобных задач это наиболее подходящий, простой и элегантный метод. В качестве бонуса можно использовать несколько независимых инстенсов приложения на одном сервере, которые не будут мешать друг другу, проверено на наших тестовых серверах :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2011, 22:53 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
Ну... не подходят. Ребут сервера во время работы скрипта -> лок-файл остался старый -> после перезагрузки скрипт не работает пока ручками не прибьешь этот файл. Значить надо добавить еще задание на удаление лок-файла в том же кроне. PS: те, кому достанется такое добро по наследству, наверняка спросят: "а сложнее нельзя было сделать?". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2011, 23:09 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
vkleНу... не подходят. Ребут сервера во время работы скрипта -> лок-файл остался старый -> после перезагрузки скрипт не работает пока ручками не прибьешь этот файл. Значить надо добавить еще задание на удаление лок-файла в том же кроне. В том то и дело, что не остаётся. Суть не в файле, а в блокировке, которая гарантированно умирает вместе с процессом. vklePS: те, кому достанется такое добро по наследству, наверняка спросят: "а сложнее нельзя было сделать?". Хорошее, прозрачное решение. Явно лучше, чем городить костыли в виде обёрточного скрипта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2011, 23:37 |
|
||
|
Cron, странная проблема при перенаправлении вывода
|
|||
|---|---|---|---|
|
#18+
Догнал, не сразу )) Да, это действительно правильнее. На работе в понедельник займусь. Остался вопрос о втором процессе /bin/bash в зависимости от наличия/отсутствия перенаправления. Хочу понять, почему происходит так. Моих знаний на данный момент для этого видимо недостаточно. Это крон принимает решение, что нужно запустить процесс-оболочку и в нем выполнить запуск скрипта + еще что то, или хто другой? Другой - это может быть и шелл, прописанный в кронтабе и мож еще что то... Подозреваю, что основанием для принятия решения служит синтаксический анализ строки задания. Или я вообще не в ту сторону думаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2011, 02:13 |
|
||
|
|

start [/forum/topic.php?fid=25&msg=37391968&tid=1484066]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
158ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 448ms |

| 0 / 0 |
