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'