FreeBSD 进程文件位置

FreeBSD 进程文件位置

我有一个基于 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”选项被删除,因为需要错误消息)。

相关内容