通过运行cron来访问代码

时间:2014-09-17 12:44:12

标签: php linux cron stack-trace pstack

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

我的问题:

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

  2. 如何打印正在运行的cron的堆栈跟踪以查看它被卡住的位置?在Linux上运行,Centos版本7

  3. 编辑: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 ()
    

    感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

如果任何一个crons正在打开文件,那么当不同的cron实例对同一文件进行并发访问尝试时,这可能是原因。您可以编写一个小的shell脚本来执行类似

之类的代码文件
$ok = `lsof | grep -c <filename>`
if($ok != "0")
then sleep 5
fi