2014-11-24 39 views
0
ps ax | grep -i 'php complete.php' 

<?php 
exec("ps ax | grep -i 'php complete.php'", $pids); 
if(!empty($pids)) { 
die("already running"); 
} 

我去检查我的PS斧头,但din't看到complete.php,我去检查,这将输出的东西,如果complete.php正在运行的文件夹,但没有输出。检查PHP脚本在运行过程中

它给了我一个假阳性。如何检查脚本complete.php是否正在运行。

原因是因为我希望它同步运行,并且我有一个无限循环执行complete.php,每2分钟执行一次cron作业。

+0

'的grep -i PHP complete.php'将在PROCESSLIST,产生假阳性。快速和肮脏的解决方案是'grep -i php [c] omplete.php'(只需在您选择的一个字符周围添加'[]'),但更强大的解决方案通常使用像pid文件这样的工作。如果你想运行它并继续运行,像'supervisor'这样的东西可以帮助你保持它,否则,这取决于你的系统是否使用sysvinit/systemd/upstart等。最好的行动方式是什么。 – Wrikken 2014-11-24 17:24:41

+0

检查'exec('ps ax',$ o); print_r($ o);'return in PHP。线是否被切断? – 2014-11-24 17:54:35

回答

0

你只会看到php进程正在运行。我看到一个php进程运行的方法是别名php二进制文件并运行它。

LN -s在/ usr/bin中/ PHP longrunningphp

longrunningphp /路径/到/你/脚本

然后用ps斧查询| grep longrunningphp

0

I had the same problem.在控制台中运行时,会得到结果,但是当在PHP中使用相同的命令时,不会返回任何结果。问题在于PHP允许的终端宽度。简单的解决办法是增加它。例如:

exec("export COLUMNS=1000; ps ax | grep -i 'php complete.php'", $pids); 
COLUMNS 
    Used by the select command to determine the terminal width when printing 
    selection lists. Automatically set upon receipt of a SIGWINCH.