[英]Show Number of Times a PHP Script is Running via Cron
我有一个通过cron在服务器上运行作业的php脚本。 基本上,cron每分钟运行一次,例如:
该脚本可以运行多次,并且可以继续运行一段时间。
我正在尝试做的是找到一种方法来读取为此用户运行的进程,并计算script.php运行了多少次。 在cron实际运行之前。 基本上,这样,如果有10个脚本实例在运行,则只有少于10个实例在运行,脚本的其他实例才会启动。 我需要确保如果有10个正在运行它不会启动。
希望这是有道理的。 ;)
读取过程取决于您使用的操作系统,并且会有所不同。 相反,每次运行脚本时,您都可以将详细信息写入数据库。 喜欢;
process_name - run_time - is_completed
在运行脚本之前,您需要检查进程表中未完成的进程是否超过10个。 您还将有日志记录
首先,您应该将对PHP脚本的调用放在Shell脚本中。
在此脚本中,第一步将是计算您的PHP程序的当前运行实例。
如果计数低于定义的限制(在您的情况下为10
),请运行您的PHP程序的新实例。
现在,关于如何计算当前正在运行的实例,您可以使用ps
命令和grep
命令(以过滤进程),然后通过wc -l
命令(以进行计数)来实现。
或者,您可以在运行新实例之前创建一个唯一的空文件,例如/tmp/php_script_<timestamp>
,然后在PHP脚本结束时将其删除。
然后,对实例进行计数就等于对/tmp
以php_script_
(另一个用wc -l
php_script_
grep
)开头的文件数进行计数。
如果要使用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答案,您将获得完整的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.