Linux 定时执行shell脚本命令之crontab
crontab可以在指定的时间执行一个shell脚本以及执行一系列Linux命令
例如:服务器管理员定时备份数据库数据、日志等
详解:
常用命令:
crontab –e //修改 crontab 文件,如果文件不存在会自动创建。
crontab –l //显示 crontab 文件。
crontab -r //删除 crontab 文件。
crontab -ir //删除 crontab 文件前提醒用户。
service crond status //查看crontab服务状态
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
基本格式 :
* * * * * command
分 时 日 月 周 命令
第1列表示分钟00~59 每分钟用*或者 */1表示
第2列表示小时00~23(0表示0点)
第3列表示日期01~31
第4列表示月份01~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
部分举例:
1、在 凌晨00:10运行
10 0 * * * /home/swz/aa.sh
2、每个工作日23:59都进行备份作业。
59 23 * * 1,2,3,4,5 /home/swz/aa.sh 或者 59 23 * * 1-5 /home/swz/aa.sh
3、每分钟运行一次命令
*/1 * * * * /home/swz/aa.sh
4、每个月的1号 14:10 运行
10 14 1 * * /home/swz/aa.sh
5、每10分钟定时请求一个地址
0 */10 * * * /usr/bin/curl http://www.aaa.com/index.php
正确、错误日志的输出是否写入到文件方法:
1.不输出任何内容(建议使用方法一)
*/1 * * * * /root/XXXX.sh >/dev/null 2>&1 或 */1 * * * * /root/XXXX.sh &>/dev/null //&表示任何内容
2.将正确和错误日志都输出到 /tmp/load.log
*/1 * * * * /root/XXXX.sh > /tmp/load.log 2>&1
3.只输出正确日志到 /tmp/load.log
*/1 * * * * /root/XXXX.sh > /tmp/load.log 或 */1 * * * * /root/XXXX.sh 1> /tmp/load.log //1可以省略
4.只输出错误日志到 /tmp/load.log
*/1 * * * * /root/XXXX.sh 2> /tmp/load.log
部分解释:
/dev/null 代表空设备文件
> 代表重定向到哪里
1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
2 表示stderr标准错误
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
加锁脚本写法:
*/30 * * * * cd /home/homework/script && flock -xn dataSync.lock /home/homework/php/bin/php dataSync.php >> dataSync.log 2>&1
秒级脚本写法:
#!/bin/bash step=10 #间隔的秒数,不能大于60 for (( i = 0; i < 60; i=(i+step) )); do $(cd /home/homework/script && flock -xn dataSync.lock /home/homework/php/bin/php dataSync.php) sleep $step done exit 0