由于PHP只能被用户触发调用,调用后自动退出内存,没有常驻内存,因此无法准确的定时处理。
一下是php定时任务的几种方法
1.简单直接不顾后果型(通过php语言实现定时):
function index(){ //设置与客户机断开是否会终止脚本的运行:true代表忽略与客户机断开,false会导致脚本程序的运行; ignore_user_abort(true); //最大执行时间:单位s;0代表永久执行直到程序结束 set_time_limit(10); $a = 1; do{ /* * 写入文件file_put_contents(filename,data[,flags,context]) * filename 文件名 * data 需要写入的内容 PHP_EOL表示换行 * flags FILE_APPEND代表文件尾内容追加,默认是覆盖原先内容 * context 修改文件属性 * */ file_put_contents('timing.txt',$a.PHP_EOL,FILE_APPEND); $a++; /* * 延迟执行代码 * sleep()单位秒 * usleep()微妙 * */ sleep(3); }while(true); }
缺点: 启动之后,便无法控制, 除非终止 PHP 宿主,占系统资源, 长时间运行.
2.环境设置定时(Linux的crontab 和window 下的)
Linux的crontab
crontab默认情况下是不执行开启日志的,所以开始写完定时后是查看不了日志,不易判断是否有执行定时任务。因此先开启定时任务的日志记录
修改rsyslog服务,将/etc/rsyslog.d/50-default.conf的 #cron.* 前的 # 去掉;用以下命令重启rsyslog服务
service rsyslog restart
然后在重启crontab服务
service cron restart
配置完日志后开始写定时任务
用户的定时文件保存在 /var/spool/cron/crontabs 目录下,并且以当前用户的名字命名;
编辑当前用户的定时任务 crontab -e 列出当前用户cron服务的详细内容 crontab -l
定时任务可以执行访问URL 和 脚本
该指令是每分钟访问一次 指定的url;
crontab的格式讲解
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,他的格式共分为6个字段,前5个字段是时间设定段,第六段是要执行的命令段。格式如下:
minute hour day month week command
其中:
minute:表示分钟,0-59任何整数
hour:表示小时,0-23任何整数
day:表示日期,1-31整数
month:月份,1-12整数
week:星期几,0-7,这里0和7代表星期日
command:要执行的命令,可以使系统命令,也可以是自己编写的脚本文件
shell脚本文件的书写