watch
我在窗口中使用screen
它来持续执行每两秒处理一次数据的 PHP 任务。因此,我可以在服务器运行时注销并登录。我不想在任务中途停止,因为如果发生这种情况,则需要手动清理,但我希望能够重新启动服务器。有没有办法在运行之间停止监视并确保它没有启动任务的另一个副本?即类似 ctrl+c 的操作,但如果任务在后台运行,则会等待。
或者,是否有其他工作流程可以实现此目的?我不能使用 cron 作业,因为它需要每两秒运行一次,但永远不会同时运行。
另请注意,脚本运行一次需要 10 秒到 30 分钟,具体取决于数据对象的大小。(每次运行处理一个对象。)这就是为什么在运行之间停止监视的可能性很小的原因……
答案1
只要编写一个小型 bash 脚本,只要文件不存在它就会循环:
while [ ! -e /tmp/stoploop ]; do
some_program
sleep 2
done
然后touch /tmp/stoploop
它就会停止循环。