【发布时间】:2012-11-22 14:53:42
【问题描述】:
我有一个每天执行一次的 cron 作业:
0 20 * * * /usr/bin/wget --timeout=10800 -O /home/File.txt http://www.site.com/script.php
到目前为止一切都很好,但最近我发现脚本刚刚停止。
我查看了/var/log/httpd/error_log(它是一个 CentOS)并发现了这个:
[Thu Nov 21 21:30:32 2012] [notice] child pid 8985 exit signal Segmentation fault (11)
现在,这意味着两件事:脚本成功运行了大约一个半小时,但随后发生了分段错误。通常脚本需要大约 2 小时才能完成,因此完成它的工作大约需要半小时。
现在,即使我打开了 error_reporting,我也找不到导致脚本停止的错误。
我想知道,有什么方法可以找到导致脚本终止的潜在错误行吗?
我确实尝试过 google、SO、ofc,并尝试通过这样做来达到与 this question here on SO 相同的效果:
0 20 * * * /usr/bin/wget --timeout=10800 -O /home/File.txt http://www.site.com/script.php 2>1& >> /home/log.txt
但是日志文件是空的。我不太擅长管理 linux,所以可能是我在这个 cronjob 中的命令有误,所以请引导我正确。
【问题讨论】:
-
因为脚本是用 php 编写的,也许有人会提示我在那里找到错误。
-
是的,但是在你的机器上你正在执行 wget,它是用 C 语言编写的。所以你只能在日志中看到来自本地机器的错误,而不是关于远程服务器的错误。顺便说一句,你怎么知道段错误属于这个 cronjob?我的段错误日志指定了崩溃进程的名称:Nov 22 16:52:47 xdat27 kernel: [1205891.274914] a.out[3508]: segfault at 4006c0 ip 00000000004005f4 sp 00007fff088c1cb0 error 7 in a.out[40000+ ]
-
这个 cron 作业实际上是在服务器本身上运行的。我知道这个 pid 属于这个脚本,因为当脚本运行时,我从
ps命令查看了它的 PID。
标签: php linux segmentation-fault wget