1. crontab的使用
crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
选项说明
-u user : 以指定用户的身份运行,默认当前用户
file : 用file里指定的配置替换指定用户的cron任务, cron任务实际存储在/var/spool/cron/${user_name}的文件种
-e : 实际是编辑/var/spool/cron/${user_name}
-l : 读取/var/spool/cron/${user_name}
-r : 删除/var/spool/cron/${user_name}
2. 注意事项
- 文件使用全局路径
* * * * * /usr/bin/flock -xn /tmp/rsync_type.lock -c '/bin/bash /home/rsync_type.sh >> /home/scribe/rsync_event_type.log 2>&1'
- 使用环境变量时,先用source命令引入环境变量
- crontab任务的标准输出会当作mail发送给用户,需要重定向输入到具体的日志文件,或者到/dev/null丢弃
- /etc/crontab文件是系统级任务,可以通过crontab -uroot -e来编辑,一般不建议将任务放到系统级,放到不同的用户下
- 查看crontab日志
sudo tail -f /var/log/cron
3. cron表达式示例
cron总共有5个配置,分别代表分、时、日、月、星期。下面以一些实例来说明:
- 每月每天每小时的第0分钟
0 * * * *
- 12月每天6点到12点, 每隔3个小时0分钟
0 6-12/3 * 12 *
- 周1到周5每天17:00
0 17 * * 1-5
- 每隔两个小时
0 */2 * * *
- 每月的1和15号
0 0 1,15 * *
- 每隔5分钟运行一次
*/5 * * * *
4. 常见问题
1. crontab里如果用到'%',需要先转义,不然的话执行报错
*/10 * * * * /bin/bash /home/soft/confluent/monitor.sh >> /home/es/monitor_es/monitor_es_`date +\%Y\%m\%d`.log
这样crontab按不同时间输出到不同的日志文件,便于后续清理