我每天都有不同时间运行几个crons。偶尔,一个或另一个会被卡住'它的过程永远不会消亡。这并不一致,但是在几个crons访问的不同文件中的函数更改之后,次数显着增加。并不总是在同一个文件中,并不总是在同一时间,并且手动运行文件可以正常工作。
我的问题:
如果我修改这个外部文件,正在运行的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 ()
感谢您的帮助!
答案 0 :(得分:0)
如果任何一个crons正在打开文件,那么当不同的cron实例对同一文件进行并发访问尝试时,这可能是原因。您可以编写一个小的shell脚本来执行类似
之类的代码文件$ok = `lsof | grep -c <filename>`
if($ok != "0")
then sleep 5
fi