微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

[日常] crontab的秒执行和串行化和多进程实现

1. crontab的最低运行频率是,按照每分钟执行一次,通过在脚本中简单实现按秒级别运行

比如这条cron规则,每分钟执行一次脚本 

* * * * * PHP /var/www/html/test/cron.PHP

cron.PHP

Highlighter">
60) break;
        $pid=getmypid();
        //查询队列等任务
        file_put_contents("/tmp/cron_test","{$pid}=={$i}\n",FILE_APPEND);
        sleep(1);
}

2.

Highlighter">
rush:PHP;gutter:true;">120) break;
        $pid=getmypid();
        //查询队列等任务
        file_put_contents("/tmp/cron_test",FILE_APPEND);
        sleep(1);
}

3.处理crontab冲突,同一时间只允许一个任务执行,使用flock文件

如果一个任务超过了一分钟没执行完,下个任务开启时会检测文件是否已经被加了锁,如果加锁失败就不执行脚本了

认使用阻塞模式,就是其他进程会一直等待这个文件释放锁,释放后就立即执行

PHP /var/www/html/test/cron.PHP'

将命令作为 flock 的 -c 选项的参数。flock 命令中,-x 表示对文件加上排他锁,-c 选项指明加锁成功后要执行的命令。

模拟脚本超时

Highlighter">
rush:PHP;gutter:true;">rand(60,130)) break;
        $pid=getmypid();
        //查询队列等任务
        file_put_contents("/tmp/cron_test",FILE_APPEND);
        sleep(1);
}

  

下面的截图可以看到,第二个进程执行到了flock命令,但是没有执行到PHP脚本,阻塞在那里了.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐