繁体   English   中英

设置cron与在特定时间后运行的参数,并使用php删除该cron作业一旦执行完成

[英]set cron with parameter that run after specific time and than delete that cron job once execution complete using php

我正在研究twilio api。 我想在其中执行一个文件,表示您的主叫订阅在电话会议期间剩余最后2分钟。

所以为此,我有剩余时间的用户说210秒。 我必须将当前电话会议的ConferenceSid传递给cron文件参数。

该文件仅在电话会议开始后(例如,88秒之后)的特定时间后执行。 所以我必须设置在电话会议开始88秒后运行的cron,并在执行完成后删除该动态创建的作业。

对于cron作业集我使用以下crontab类。 这是我正在尝试的代码。

$path = dirname(__FILE__);
$cron = $path . "/test.php ConferenceSid=".$_REQUEST['ConferenceSid'];
Crontab::addJob('*/1 * * * * php '.$cron);
Crontab::removeJob('*/1 * * * * php '.$cron);

我不知道如何在88秒后传递参数使文件执行。

这是我的Crontab类,它是从另一个堆栈溢出答案中找到的。

class Crontab {

    static private function stringToArray($jobs = '') {
        $array = explode("\r\n", trim($jobs)); // trim() gets rid of the last \r\n
        foreach ($array as $key => $item) {
            if ($item == '') {
                unset($array[$key]);
            }
        }
        return $array;
    }

    static private function arrayToString($jobs = array()) {
        $string = implode("\r\n", $jobs);
        return $string;
    }

    static public function getJobs() {
        $output = shell_exec('crontab -l');
        return self::stringToArray($output);
    }

    static public function saveJobs($jobs = array()) {
        $output = shell_exec('echo "' . self::arrayToString($jobs) . '" | crontab -');
        return $output;
    }

    static public function doesJobExist($job = '') {
        $jobs = self::getJobs();
        if (in_array($job, $jobs)) {
            return true;
        } else {
            return false;
        }
    }

    static public function addJob($job = '') {
        if (self::doesJobExist($job)) {
            return false;
        } else {
            $jobs = self::getJobs();
            $jobs[] = $job;
            return self::saveJobs($jobs);
        }
    }

    static public function removeJob($job = '') {
        if (self::doesJobExist($job)) {
            $jobs = self::getJobs();
            unset($jobs[array_search($job, $jobs)]);
            return self::saveJobs($jobs);
        } else {
            return false;
        }
     }
}

您可以删除cron方法并让脚本像这样开始:

sleep($numberOfSeconds)

您只需要以不会阻止主程序的方式调用脚本。 请参阅如何使用php在后台运行程序(非阻塞)?

我会用的cron来代替。 它被设计为执行一次命令。

如果你需要秒精度,你可以在sleep使用它,所以不是sleep(50000)at now + 833 minat now + 833 minsleep(20)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM