我正在写一个将通过cron运行的PHP脚本.它的任务是调用其他PHP脚本.被调用的脚本也可以在外部执行.我想要的是,当一个文件正在执行时,它不应该同时执行.为了清楚起见,请考虑以下内容
假设有一个脚本master.PHP,它一个接一个地调用另外两个脚本script1.PHP和script2.PHP.现在,一旦它调用了script1.PHP,它就会开始执行并花费10分钟来完成它的处理.这个Script1.PHP也可以由用户在这10分钟内单独运行.
我想要做的是当这个脚本在其处理过程中时,它不应该只是平行执行.
有没有办法实现这个目标? (也许通过检查script1.PHP的PID).
Thanx提前.
解决方法:
这就是我用pid文件做的方法.此外,如果脚本运行超过300秒,它将被终止:
$pid_file = '/var/run/script1.pid';
if (file_exists($pid_file)) {
$pid = file_get_contents($pid_file);
if ($pid && file_exists('/proc/' . $pid)) {
$time = filemtime($pid_file);
if (time() - $time > 300) {
posix_kill($pid, 9);
} else {
exit("Another instance of {$argv[0]} is running.\n");
}
}
}
$pid = posix_getpid();
if (!file_put_contents($pid_file, $pid)) exit("Can't write pid file $pid_file.\n");
unlink($pid_file);
如果要在第一个实例完成时运行脚本 – 将exit()替换为sleep(1)并将整个块放在循环中.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。