我有一个设置为持续运行的 cronjob。这是一个从 Twitter 流式传输数据的 php 文件。但是 Twitter 偶尔会宕机,或者我们失去连接,所以我让 cron 每分钟检查一次,尝试运行该文件。php 脚本检查锁定文件以确保不会运行多个副本。问题是这个脚本会连续运行数小时,我希望能够终止它。但是我似乎无法使用类似以下命令找到它
ps ux
cronjob 以我的用户身份启动,我查看了它在 root 下的情况。我似乎根本找不到正在运行的进程。
我在用
/usr/bin/php /var/www/twitter/stream.php
在我的 cron 文件中执行,我知道它正在运行,因为它每分钟都会将文件写入目录。我可以停止 cron,但进程仍在继续,我只需终止它即可。不确定这是否属于此处或 Stack Overflow。
答案1
要显示守护进程,ps
您需要包含-e
选项 (System V/POSIX) 或a
(BSDish)。请尝试ps aux
或ps -ef
。
答案2
你做错了。(至少以我的拙见 :-)
你可以按照 Geekosaur 或 James Yale 建议的方式做你想做的事,但我认为你真正想要的是 PHPpcntl_报警()函数(及其相关函数pcntl_signal
),它将允许您的 PHP 脚本利用该SIGALRM
功能,并在出现问题时自行终止。
您对闹钟的操作由您决定(它可以简单到“如果已经运行了一个小时就退出”,也可以复杂到“检查我们是否已经从 Twitter 获取数据。如果没有,则重新初始化连接,如果仍然没有获取数据,则退出并让脚本稍后再次运行” - 这完全取决于您的脚本的复杂程度)。
有关信号处理的更多问题SIGALRM
可能应该去 StackOverflow - 他们(希望)熟悉它并可以从编程的角度为您提供更多指导 :-)
答案3
通常进程将 PID 写入锁文件,这样您就可以在一个地方找到进程是否正在运行以及它的 ID。
我建议您修改脚本来执行此操作,然后您可以根据需要执行 posix_kill 或类似操作。