PHP+Crontab+Flock实现定时任务

Crontab

Crontab是一个Unix/Linux系统下的常用定时执行任务

安装Crontab

yum install vixie-cron crontabs  //vixie-cron软件包为cron的主程序,crontabs是用来安装、卸载、列举进程表格的程序

chkcofig crond on  //开机自启动

service crond start   //启动

添加crontab定时任务

crontab -e  //打开crontab文件,会默认以vi方式打开

格式

Minute

Hour

Dayofmonth

Month

Dayofweek

Command

注释

分钟

小时

日期

月份

命令

取值范围

0-59

0-23

1-31

1-12

0-7(0和7都代表周日)

 

常用符号

符号

注释

*

所有有效的值

,

分割开设定多个值

-

一段时间范围

/n

隔n长时间

eg:*/3 9-17 1,15,25 * * command  //每个月的1、15、15号的9点至17点每隔3分钟执行一次command命令

 

查看crontab定时任务

crontab -l

 

flock锁

为防止上次脚本没有执行完,下个脚本重复执行可以使用flock锁防止进程冲突

使用方法,创建crontab定时任务时,指定flock,eg:

*/1 * * * * flock -xw 10 command   //每一分钟执行一次command,如果上次任务没有完成等待10s后重试

 

flock常用参数:-h,--help

-s,--shared  获取一个共享锁  

-x,--exclusive 获取一个独占锁

-n,--nonblock 没有立即获得锁,直接失败

-w,--timeout  没有立即获得锁,等待指定时间,单位为秒

-c,--command 在shell中运行一个单独的命令

 

命令案例详解

命令1:(不加锁/加锁  绝对路径)

* * * * * /bin/php /home/run.php >> /home/run.log 2>&1
* * * * * flock -xn /tmp/run.lock -c '/bin/php /home/run.php >> /home/run.log 2>&1'

注释: /temp/run.lock  用于判断文件是否已加锁,一般命名为: filename.lock

           /bin/php       php可执行文件的位置

          /home/run.php  要执行的php文件的具体位置,文件名为filename.php

          >>  表示将运行php文件的输出以追加的方式进行重定向

         /home/run.log  执行脚本产生的日志文件的位置,一般命名为filename.log

        (同一条命令中最好保持filename相同)

标准输入stdin 、标准输出stdout 、 标准错误stderr,对应的系统文件的文件描述符为0、1、2 

& 等同与,2>&1 表示标准错误重定向到标准输出中

命令2:(不加锁/加锁  相对路径)

 * * * * * cd /home; /bin/php run.php >> ./run.log 2>&1
 * * * * * cd /home; flock -xn /tmp/run.lock -c '/bin/php run.php >> ./run.log 2>&1'

 

Crontab任务不执行

https://www.tony-yin.site/2018/10/29/Why-Crontab-Not-Work/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章