php-скрипт из sh из crontab умирает без следов

в моем crontab есть скрипт, запускающийся в 2:40 утра, выполняющий некоторые подпрограммы как из команд sh, так и из скриптов php, начинающихся из файлов sh.

строка в crontab выглядит так:

SHELL=/BIN/BASH
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/mypath

40 2 * * * root run-parts /etc/cron.twoam

внутри папки cron.twoam находится один скрипт, назовем его script1: внутри скрипта 1 вызываются другие скрипты, и они выполняются нормально. Затем наступает время этого скрипта, назовем его скриптом2, вызываемым из скрипта1. Я оставляю следы как в текстовых файлах, так и в системных журналах, чтобы проверить, что происходит.

echo "exec script2" >> /mypath/txtlog
/mypath/script2 > /mypath/txtlog2
echo "end of script2" >> /mypath/txtlog
logger -p local1.info "09@ script2 executed"
echo "end of crontwoam" >> /mypath/txtlog
date >> /mypath/txtlog

.... другой сценарий, который работает нормально

теперь давайте посмотрим, что находится внутри script2:

some scripts....
/mypath/subpath/script3
other scripts...

теперь давайте проверим script3:

various php commands
cd /phppath/
php /phppath/myscript.php >> /mypath/myphplog
php /phppath/otherscript.php >> /mypath/myphplog

другое commands

и, наконец, идет скрипт php. скрипт php имеет различные включенные скрипты. все они работают нормально, кроме одного. всякий раз, когда я помещаю его из строки 2 в строку 90, выполнение на этом молча останавливается.

так что доходит до той части, где я выполняю

include("phpscript2.php");

, а все, что происходит после, не выполняется.

phpscripts2.php работает нормально, если выполняется командная строка с php phpscripts2.php моим пользователем или root.

внутри phpscripts2 есть (я включаю значимые части):

echo "запущен phpscripts2" exec ("mysqldump ......"); ftp_connect (); file_get_contents (" https: // someotherscriptsondifferentserver "); echo "finished phpscripts2"

теперь, что я нахожу в журналах: в / mypath / txtlog я обнаружил и

exec script2

, и

end of script 2

в myphplog, я нашел

started phpscript2

и строку после

started otherphpscript

, у меня отсутствует конец phpscript2, который заканчивается раньше срока. время выполнения phpscript2 составляет около 2 минут.

Я не могу найти ни в одном журнале следов какой-либо ошибки. где я могу посмотреть?

РЕДАКТИРОВАТЬ:

Я забыл добавить, что если создать файл sh, который вызывает только этот сценарий, и я создаю специальную строку crontab, чтобы вызывать его только для теста, все работает.

0
задан 5 December 2015 в 11:14
1 ответ

Вы не захватываете stderr в скрипте, поэтому он должен быть отправлен электронное письмо владельцу cron-файла. Для захвата stderr используйте 2> & 1 для отправки в тот же файл, что и stdout, или 2> / some / other / file

Это был комментарий, который привел меня к проблеме.

Я перенаправил stdErr в текстовый файл и наконец смог его увидеть. У меня была дублирующая функция, которая выходила только в crontab. Это потому, что полный сценарий содержал серию require_once плюс одинокий require. Это не имело никакого вреда, пока я не добавил небольшую функцию в общий требуемый файл, и я не заметил, что вместо require_once все еще есть require. Ошибка, конечно, была отправлена ​​по почте из crontab, но я еще не настраивал sendmail, поэтому ничего не вышло.

0
ответ дан 5 December 2019 в 11:24

Теги

Похожие вопросы