系统环境:我的环境是
cat /etc/redhat-release //看操作系统版本
CentOS Linux release 7.4.1708 (Core)
一.使用延时来实现每N秒执行 原理:通过延时方法 sleep N 来实现每N秒执行。
写个php文件
$time = @date("Y-m-d H:i:s"); echo $time; file_put_contents('text.txt',$time."\n",FILE_APPEND);
打开 crontab -e 编辑定时任务 每隔10秒执行一次
* * * * * cd /www/dingshi/;php index.php
* * * * * sleep 10; cd /www/dingshi/;php index.php
* * * * * sleep 20; cd /www/dingshi/;php index.php
* * * * * sleep 30; cd /www/dingshi/;php index.php
* * * * * sleep 40; cd /www/dingshi/;php index.php
* * * * * sleep 50; cd /www/dingshi/;php index.php
注意 php是你配置的环境变量 查看 tail -f /www/dingshi/text.txt
遇到的坑:
之前写的是 * * * * * php /www/dingshi/index.php 等不知道为什么文本里就是没内容,定时任务执行了但是没有写入, 权限,重启定时任务都试了,就是没写入,但是在命令行 执行 php /www/dingshi/index.php 可以执行无语
后来改为了 * * * * * cd /www/dingshi/;php index.php
二.编写shell脚本实现 原理:在sh使用for语句实现循环指定秒数执行。
写shell脚本执行php文件 将数据写到文本
- #!/bin/bash
- step=10 #间隔的秒数,不能大于60
- for (( i = 0; i < 60; i=(i+step) )); do
- $(php 'php /www/dingshi/index.php')
- sleep $step
- done
- exit 0
编辑定时 * * * * * /www/dingshi/crontab.sh
-----------------------------------------分割线---------- 查看定时任务是否执行,-----------------------------
启动定时:service crond start crontab的日志位置一般位于/var/log/cron,利用下面的语句即可查看日志。 tail -f /var/log/cron