0

我每天在不同的时间运行几个 crons。偶尔,一个或另一个会被“卡住”,它的过程永远不会结束。这并不一致,但是在几个 cron 访问的不同文件中的函数发生更改后,次数显着增加。并不总是到同一个文件,也不总是到同一时间,并且手动运行文件可以正常工作。

我的问题:

  1. 如果我修改这个外部文件,正在运行的 cron 应该会接受更改,对吗?(尝试过但它不起作用,所以它要么不起作用,要么在我的代码中没有达到这一点,这让我想到了我的第二个问题:)

  2. 如何打印正在运行的 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 ()

谢谢你的帮助!

4

1 回答 1

0

如果任何 cron 使文件保持打开状态,则这可能是不同 cron 实例对同一文件进行并发访问尝试的原因。您可以编写一个小的 shell 脚本来执行代码文件,前面有类似的东西

$ok = `lsof | grep -c <filename>`
if($ok != "0")
then sleep 5
fi
于 2014-09-17T13:15:40.433 回答