我有一个php脚本,我在CentOS上每10分钟通过cron执行一次此脚本。
问题是,如果cron作业将花费10分钟以上,则将启动同一cron作业的另一个实例。
我尝试了一个技巧,那就是:
但是可能存在一个问题,就是由于某种原因,脚本未删除或删除锁定文件时。Cron将永远不会再次启动。
有什么方法可以停止cron作业(如果已经在运行),Linux命令或类似命令吗?
咨询锁定正是为此目的而进行的。
您可以使用完成咨询锁定flock()。只需将函数应用于先前打开的锁定文件,即可确定另一个脚本是否对其具有锁定。
flock()
$f = fopen('lock', 'w') or die ('Cannot create lock file'); if (flock($f, LOCK_EX | LOCK_NB)) { // yay }
在这种情况下,我要添加LOCK_NB以防止下一个脚本等待第一个脚本完成。由于您使用的是cron,因此始终会有下一个脚本。
LOCK_NB
如果当前脚本过早终止,则操作系统将释放所有文件锁。