в моем 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, чтобы вызывать его только для теста, все работает.
Вы не захватываете stderr в скрипте, поэтому он должен быть отправлен электронное письмо владельцу cron-файла. Для захвата stderr используйте 2> & 1 для отправки в тот же файл, что и stdout, или 2> / some / other / file
Это был комментарий, который привел меня к проблеме.
Я перенаправил stdErr в текстовый файл и наконец смог его увидеть. У меня была дублирующая функция, которая выходила только в crontab. Это потому, что полный сценарий содержал серию require_once плюс одинокий require. Это не имело никакого вреда, пока я не добавил небольшую функцию в общий требуемый файл, и я не заметил, что вместо require_once все еще есть require. Ошибка, конечно, была отправлена по почте из crontab, но я еще не настраивал sendmail, поэтому ничего не вышло.