У меня есть несколько крон каждый день в разное время. Время от времени тот или иной застревает, и его процесс никогда не умрет. Это не согласуется, но после изменения функции в другом файле, к которому обращаются несколько крон, произошло заметное увеличение числа раз. Не всегда к одному и тому же файлу, не всегда к одному и тому же времени, и запуск файлов вручную работает нормально.
Мои вопросы:
Если я изменю этот внешний файл, работающий cron должен принять изменение, верно? (Пробовал и не работает, так что или нет, или не дошел до того момента в моем коде, что подводит меня ко второму вопросу 🙂
Как я могу напечатать трассировку стека работающего cron, чтобы увидеть, где он застрял? Работает на Linux, Centos версия 7
Редактировать: pstack
дает мне main () — как я могу получить дальше, чем это?
#0 0x00007f710a129e0d in poll () from /lib64/libc.so.6
#1 0x00007f7102391ab9 in Curl_poll () from /lib64/libcurl.so.4
#2 0x00007f710238aa4d in curl_multi_wait () from /lib64/libcurl.so.4
#3 0x00007f7102383baf in curl_easy_perform () from /lib64/libcurl.so.4
#4 0x00007f71025c96f6 in zif_curl_exec () from /usr/lib64/php/modules/curl.so
#5 0x00007f71029e6a4d in xdebug_execute_internal (current_execute_data=0x7f710d8f14a0, return_value_used=1) at /var/tmp/xdebug/xdebug.c:1547
#6 0x00007f710dc61271 in zend_do_fcall_common_helper_SPEC ()
#7 0x00007f710dbde617 in execute ()
#8 0x00007f71029e5e3a in xdebug_execute (op_array=0x7f70fa316bc8) at /var/tmp/xdebug/xdebug.c:1435
#9 0x00007f710dc6190d in zend_do_fcall_common_helper_SPEC ()
#10 0x00007f710dbde617 in execute ()
#11 0x00007f71029e5e3a in xdebug_execute (op_array=0x7f710f89efb0) at /var/tmp/xdebug/xdebug.c:1435
#12 0x00007f710dc6190d in zend_do_fcall_common_helper_SPEC ()
#13 0x00007f710dbde617 in execute ()
#14 0x00007f71029e5e3a in xdebug_execute (op_array=0x7f710d921838) at /var/tmp/xdebug/xdebug.c:1435
#15 0x00007f710dbb727f in zend_execute_scripts ()
#16 0x00007f710db56656 in php_execute_script ()
#17 0x00007f710dc63548 in do_cli ()
#18 0x00007f710da1015e in main ()
Спасибо за любую помощь!
Если какой-либо из крон оставляет файл открытым, то это может быть причиной, когда одновременная попытка доступа к одному и тому же файлу выполняется разными экземплярами крон. Вы можете написать небольшой скрипт оболочки для выполнения файла кода, которому предшествует что-то вроде
$ok = `lsof | grep -c <filename>`
if($ok != "0")
then sleep 5
fi
Других решений пока нет …