crontab每秒执行

Linuxcrontab命令,最小执行时间是一分钟.如果小于一分钟内重复执行,可以使用一下方法.

使用延时来实现N秒执行

1
2
3
#log.php
<?php
file_put_contents('/home/www/php/crontab/run.log',date('Y-m-d H:i:s')."\r\n", FILE_APPEND);

crontab -e` 增加任务

1
2
3
4
5
6
7
# 每10秒执行一次
* * * * * php /home/www/php/crontab/log.php
* * * * * sleep 10; php /home/www/php/crontab/log.php
* * * * * sleep 20; php /home/www/php/crontab/log.php
* * * * * sleep 30; php /home/www/php/crontab/log.php
* * * * * sleep 40; php /home/www/php/crontab/log.php
* * * * * sleep 50; php /home/www/php/crontab/log.php

查看记录:

1
2
3
4
5
6
7
8
tail -f /home/www/php/crontab/run.log  
2019-01-24 15:47:01
2019-01-24 15:47:11
2019-01-24 15:47:21
2019-01-24 15:47:31
2019-01-24 15:47:41
2019-01-24 15:47:51
2019-01-24 15:48:01

60必须能整除间隔的秒数(没有余数),例如间隔的秒数是2,4,6,10,12等。

如果间隔的秒数太少,例如2秒执行一次,这样就需要在crontab 加入60/2=30条语句。不建议使用此方法

编写shell脚本

1
2
3
4
5
6
7
#crontab.sh
#!/bin/bash
setp=2 #间隔的秒数,不能大于60
for (( i = 0; i < 60; i=(i+step) )); do
$(php '/home/www/php/crontab/tolog.php')
sleep $step
done

增加crontab任务

1
* * * * * /home/www/php/crontab/crontab.sh

每分钟跑一次crontab.sh,然后脚本中通过for循环来进行2秒运行一次