我正在写一个将通过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");
然后取消链接脚本末尾的pid文件:
unlink($pid_file);
如果要在第一个实例完成时运行脚本 – 将exit()替换为sleep(1)并将整个块放在循环中.
标签:php,cron,pid 来源: https://codeday.me/bug/20190826/1729339.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。