我有一个用PHP编写的脚本,由cron作业启动。这是一个长时间运行的脚本,通常cron在最后一个实例完成之前启动另一个实例。没关系。我允许在任何给定时间运行此脚本的3个实例。
我将脚本限制为3个实例,此代码位于脚本顶部:
exec('ps -A | grep nameofmyscript', $results);
if (count($results) > 4) {
echo "Already Running\n"
die(0);
}
它有效,但我正在寻找更好的方法。几周前,当我重命名脚本时,这种方法适用于我,并且忘记更改那行代码。当脚本被命名为类似于已经运行的进程时,它也会失败。
答案 0 :(得分:2)
使用PHP,您可以在特定于cron作业的目录中创建一个随机命名的锁定文件。在让PHP脚本继续之前,请检查目录中存在的锁定文件的数量。这可能不是最好的解决方案。
答案 1 :(得分:1)
您可以自动设置名称...
exec('ps -A | grep ' . escapeshellarg(basename(__FILE__)) , $results);
if (count($results) > 4) {
echo "Already Running\n"
die(0);
}