PHP - crontab 定时任务

/**

*

* Created by PHPStorm

* User: zhanghao

* Date: 2019-12-5 0005$

* Time: 17:03$

* Email: <[email protected]>

*/

namespace app\common\Util;

class Crontab

{

    /**

    * 测试

    */

    private function test()

{

        $cron = new Crontab();

        $i = (string)(int)date('i', time());

        $h = (string)(int)date('H', time());

        $d = '*';

        $m = '*';

        $dow = '1-5';

        $command = config('timing_switch') . 43961;

        $cron_command = "$i $h $d $m $dow $command";

//创建

        $info = $cron->append_cronjob($cron_command);

//删除

        $info2 = $cron->del_designated_cron(43961, 'spring');

//更新

        $info3 = $cron->update_designated_cron(43961, 'spring', $cron_command);

}

    /**

    * 添加定时推送

    * @param $command

* @return bool

*/

    public function cronjob_exists($command): bool

    {

        $cronjob_exists = false;

        exec('crontab -l', $crontab);

        if (isset($crontab) && is_array($crontab)) {

            $crontab = array_flip($crontab);

            if (isset($crontab[$command])) {

                $cronjob_exists = true;

}

}

        return $cronjob_exists;

}

    /**

    * 追加

    * @param $command

* @return array

*/

    public function append_cronjob($command): array

    {

        if (is_string($command) && !empty($command) && $this->cronjob_exists($command) === FALSE) {

            //add job to crontab

            exec('echo -e "`crontab -l`\n' . $command . '" | crontab -', $output);

}

        return ['command' => $command, 'status' => empty($output) ? 0 : 1, 'linux_user' => exec('whoami')];

}

    /**

    * 删除全部

    */

    public function del_cron()

{

        exec('crontab -r', $crontab);

}

    /**

    * 删除单条定时任务

    * 19 10 * * 1-5 curl banpai.yuezhix.com/api/timing/switches/id/43969

    * 如上行定时命令 中 43969 就是要传递的$id

    * @param $id : ban_timing_log 表中的ID ,

    * @param $user : 创建命令的用户,apache执行用户 (www) ban_timing_log 表中的linux_user ,

    * 不是上一条命令,是这个通知的上一次定时任务,是可以在表中查看到的

    */

    public function del_designated_cron($id, $user)

{

        exec(' sed -i \'/' . $id . '/d\' /var/spool/cron/crontabs/' . $user, $x);

        exec(' /etc/init.d/cron reload' , $x);

}

    /**

    * 更新指定定时任务

    * @param $id

* @param $user

* @param $command

这个方法没有用, 修改文件后不起作用,使用下面的方法

*/

    public function update_designated_cron_old($id, $user, $command)

{

        exec(' sed -i \'/' . $id . '/c ' . $command . '\' /var/spool/cron/crontabs/' . $user, $x);

        exec(' /etc/init.d/cron reload' , $x);

}

    /**

    * 更新指定定时任务

这个方法 属实是可以进行修改

    * @param $id

* @param $user

* @param $command

*/

    public function update_designated_cron($id, $user, $command)

{

        $this->del_designated_cron($id, $user);

        $this->append_cronjob($command);

}

}

你可能感兴趣的:(PHP - crontab 定时任务)