Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过cron作业运行的脚本获取所有用户进程_Php_Cron - Fatal编程技术网

Php 通过cron作业运行的脚本获取所有用户进程

Php 通过cron作业运行的脚本获取所有用户进程,php,cron,Php,Cron,我有一个玉米作业,每分钟执行一个PHP脚本,然后执行processchecker.PHP。然后,脚本processchecker.php将从用户进程中进行检查,其中包含文件名backgroundprocess.php 如果iam通过访问这些文件各自的URL来手动触发这些文件,那么这将非常有效 当我将流程作为cron作业进行自动化时,问题就出现了,因为某些原因,它不会返回我正在寻找的流程。Cron作业似乎在没有用户帐户的情况下运行,我怀疑我需要一种列出所有进程的方法,尤其是那些由Cron作业本身启

我有一个玉米作业,每分钟执行一个PHP脚本,然后执行processchecker.PHP。然后,脚本processchecker.php将从用户进程中进行检查,其中包含文件名backgroundprocess.php

如果iam通过访问这些文件各自的URL来手动触发这些文件,那么这将非常有效

当我将流程作为cron作业进行自动化时,问题就出现了,因为某些原因,它不会返回我正在寻找的流程。Cron作业似乎在没有用户帐户的情况下运行,我怀疑我需要一种列出所有进程的方法,尤其是那些由Cron作业本身启动的进程

processcheck.php


据我所知,您只想检查当前是否没有其他相同的进程在运行。 例如,如果process1.php每1分钟运行一次,并且运行时可能需要3分钟,那么您不希望在第二分钟运行另一个进程。 如果是您的情况,那么您可以检查是否存在另一个同名的进程,该进程如下:

function is_other_process_exists()
{
    $my_name = 'xxx'; //your process name, e.g. process1.php
    $ps = `ps gax`;
    $psLines = explode("\n", $ps);
    array_pop($psLines);
    $myLines = array();
    foreach ( $psLines as $psLine )
    {
        if (strstr($psLine, $my_name))
        {
            $myLines[] = $psLine;
        }
    }
    if ( count($myLines) > 1 ) {
        $myPid = posix_getpid();
        echo "process is already running with process id {$myPid}";
        exit;
    }
}

将“ps aux”命令的输出记录到一个文件中,以便您可以检查它,有时它会给出一个整数1?命令应返回0作为$result参数的退出代码。所以你应该只考虑输出有效时,$结果包含0。@贡特勒兹……我刚刚编辑的样本输出…请阅读edit@Lukesoft你找到解决办法了吗?在过去的几天里,我一直在为同一个问题苦苦挣扎
Array
(
    [0] => USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    [1] => rycjptbb     1  0.0  0.0   6324   600 ?        SN   14:51   0:00 jailshell (rycjptbb) [init] ell -c nohup php public_html/processchecker.php > /dev/null & echo $!
    [2] => rycjptbb     3  1.0  0.0 248940 12308 ?        SN   14:51   0:00 php public_html/processchecker.php
    [3] => rycjptbb     4  0.0  0.0 110236  1112 ?        RN   14:51   0:00 ps aux
)
function is_other_process_exists()
{
    $my_name = 'xxx'; //your process name, e.g. process1.php
    $ps = `ps gax`;
    $psLines = explode("\n", $ps);
    array_pop($psLines);
    $myLines = array();
    foreach ( $psLines as $psLine )
    {
        if (strstr($psLine, $my_name))
        {
            $myLines[] = $psLine;
        }
    }
    if ( count($myLines) > 1 ) {
        $myPid = posix_getpid();
        echo "process is already running with process id {$myPid}";
        exit;
    }
}