crontab
crontab
基本格式
1 | * * * * * command |
- 第1列表示分钟1~59 每分钟用或者 /1表示
- 第2列表示小时1~23(0表示0点)
- 第3列表示日期1~31
- 第4列表示月份1~12
- 第5列标识号星期0~6(0表示星期天)
例子
crontab文件的一些例子:
1 | 30 21 * * * /usr/local/etc/rc.d/lighttpd restart |
上面的例子表示每晚的21:30重启apache。
1 | 45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart |
上面的例子表示每月1、10、22日的4 : 45重启apache。
1 | 10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart |
上面的例子表示每周六、周日的1 : 10重启apache。
1 | 0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart |
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
1 | 0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart |
上面的例子表示每星期六的11 : 00 pm重启apache。
1 | * */1 * * * /usr/local/etc/rc.d/lighttpd restart |
每一小时重启apache
1 | * 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart |
晚上11点到早上7点之间,每隔一小时重启apache
1 | 0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart |
每月的4号与每周一到周三的11点重启apache
1 | 10 6 * * * |
每天早上6点10分
1 | 0 */2 * * * |
每两个小时
1 | 0 23-7/2,8 * * * |
晚上11点到早上8点之间每两个小时,早上8点
1 | 0 11 4 * mon-wed |
每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
1 | 0 4 1 jan * |
1月份日早上4点
*/n 代表每n/单位执行一下
常用命令
- crontab -e 编辑任务
- crontab -l 列出所有的任务
- crontab -r 删除所有的任务
服务管理
1 | service crond [start|stop|restart|status] |
查看crontab输出日志
Linux
位于/var/log/cron-* 文件中Mac
flock
如果任务执行时间过长而间隔太短就会出现上个任务还没结束下个任务就又开始执行了,长期下去会给系统负载造成很大影响。针对这种情况,可以利用flock
的锁机制保证只有一个任务在执行。
flock命令参数:1
2
3
4
5
6
7
8
9-s, --shared: 获得一个共享锁
-x, --exclusive: 获得一个独占锁
-u, --unlock: 移除一个锁,通常是不需要的,脚本执行完会自动丢弃锁
-n, --nonblock: 如果没有立即获得锁,直接失败而不是等待
-w, --timeout: 如果没有立即获得锁,等待指定时间
-o, --close: 在运行命令前关闭文件的描述符号。用于如果命令产生子进程时会不受锁的管控
-c, --command: 在shell中运行一个单独的命令
-h, --help 显示帮助
-V, --version: 显示版本
例子:
防止
rsync
重复执行先创建一个lock文件:
1
touch /var/run/rsync.lock
配置crontab:
1
30 * * * * flock -xn /var/run/rsync.lock -c 'rsync -avz src dest >/dev/null 2>&1'