我有一个php脚本,可以通过cron在服务器上运行作业。基本上cron每分钟运行一次,如:
此脚本可以多次运行,并继续运行一段时间。
我正在尝试做的是找到一种方法来读取为该用户运行的进程,并计算script.php运行的次数。在cron实际运行之前。基本上这样,如果脚本有10个实例在运行,那么在运行少于10个之前,它的其他实例都不会启动。如果有10个正在运行,我需要确保它不会启动。
希望这是有道理的。 ;)
答案 0 :(得分:2)
阅读过程取决于您使用的操作系统,并且不一样。相反,每次运行脚本时,都可以向数据库写入详细信息。等;
process_name - run_time - is_completed
在脚本运行之前,您需要检查进程表中是否有超过10个已完成的进程。您还将拥有日志记录
答案 1 :(得分:0)
首先,您应该在Shell脚本中调用PHP脚本。
在此脚本中,第一步是计算PHP程序的当前运行实例。
如果计数低于定义的限制(在您的情况下为10
),请运行PHP程序的新实例。
现在关于如何计算当前运行的实例,您可以使用ps
命令管道,使用grep
命令(过滤进程),然后执行wc -l
命令(到做计数)。
或者您可以在运行新实例之前创建一个唯一的空文件,例如/tmp/php_script_<timestamp>
,并在PHP脚本结束时将其删除。
计算实例将等同于计算/tmp
中以php_script_
开头的文件数量(另一个grep
管道wc -l
)。
答案 2 :(得分:0)
如果您希望使用bash脚本进行检查,请尝试将ps ax
与grep
合并:
ps ax | grep 'php /home/janj/www/test.php'
这将返回类似于此的内容:
17857 ? Ss 0:00 /bin/sh -c php /home/janj/www/test.php
17858 ? S 0:00 php /home/janj/www/test.php
17897 ? Ss 0:00 /bin/sh -c php /home/janj/www/test.php
17898 ? S 0:00 php /home/janj/www/test.php
17903 pts/7 S+ 0:00 grep --color=auto php /home/janj/www/test.php
将它与 maxime.bochon 答案结合起来,您将获得完整的解决方案。