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脚本,阻塞在那里了.