我有一个基于 PHP 的脚本,可以停止两个相同的进程执行(通过 crontab),在 CentOS 上,我通过以下方式检查正在运行的进程:
if(file_exists("/proc/{$pid}" )) {
但是 freeBSD 似乎不支持这种结构,是否有类似的位置可供我检查?还是我必须执行 shell 命令?
答案1
锁定 cron 任务(防止并行执行)的最简单方法是锁f(1)命令。它在 FreeBSD 和 Mac OS X 上可用。Linux 有非常相似的flock
命令(但选项不同)。
例如
* * * * * lockf -st0 /tmp/foo.lock /path/to/foo-script
如果 foo-script 运行时间超过一分钟,则下一个脚本将不会启动。-t0
意思是不要等待锁,直接退出。
如果需要,可以等待锁定,例如,
@hourly lockf -st1800 /tmp/foo.lock /path/to/foo-script
将等待 30 分钟以获得锁定,如果锁定仍然保持,则退出。
如果长时间运行的过程出现异常情况并指示某些错误,则向管理员发送错误消息很有用:
[email protected]
@daily lockf -t0 /tmp/foo.lock /path/to/foo-script
(-s“silent”选项被删除,因为需要错误消息)。