Joh*_*ohn 15 scheduled-task cron
我每分钟运行一个作业来重新索引我网站的内容。
今天,搜索引擎死了,当我登录时,有数百个由 cron 启动的孤立进程。
是否有另一种使用某种现有软件的方法可以让我每分钟执行一次作业,但如果该作业没有返回(即因为搜索引擎进程失败),则不会启动另一个实例?
use*_*517 27
问题不在于 cron——而在于你的工作。
您需要让您的工作与某种描述的锁进行交互。最简单的方法是让它尝试创建一个目录,如果成功则继续,否则退出。当您的作业完成并退出时,它应该删除准备下一次运行的目录。这是一个脚本来说明。
#!/bin/bash
function cleanup {
echo "Cleanup"
rmdir /tmp/myjob.lck
}
mkdir /tmp/myjob.lck || exit 1
trap cleanup EXIT
echo 'Job Running'
sleep 60
exit 0
Run Code Online (Sandbox Code Playgroud)
在一个终端中运行它,然后在 60 秒之前在另一个终端中运行它,它将以状态 1 退出。一旦第一个进程退出,您就可以从第二个终端运行它......
编辑:
当我刚刚了解 flock 时,我想我会更新这个答案。
flock(1)可能更容易使用。在这种情况下flock -n
似乎是合适的,例如
* * * * * /usr/bin/flock -n /tmp/myAppLock.lck /path/to/your/job
Run Code Online (Sandbox Code Playgroud)
将每分钟运行一次您的工作,但如果 flock 无法获得文件锁定,则会失败。