有一些定期定时的任务,如周期性的清理一下/tmp,周期性的去备份一次数据库,周期性的分析日志等等
crontab介绍
crontab 命令常见于 Unix 和类 Unix 的操作系统之中(Linux 就属于类 Unix 操作系统),用于设置周期性被执行的指令。该命令从输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行。通常,crontab 储存的指令被守护进程激活,crond 为其守护进程,crond 常常在后台运行,每一分钟会检查一次是否有预定的作业需要执行
crontab格式
0.启动rsyslog(忽略):
1 2 | sudo service rsyslog start #ubuntu中不需手动开启 sudo cron -f & #ubuntu中也不需要手动开启 |
1.crontab -e
用当前用户添加执行的命令格式如下:
sudo crontab -e
:是用root账号添加任务
1 | * * * * * /command |
1 2 3 4 5 6 | 前五个字段是时间段从左到右依次: 分钟:0-59 小时:1-23 日期:1-31 月份:1-12 星期:0-6(0表示周日) |
第六个字段是命名
特殊符号:
1 2 3 4 | * :任何时间 , :分割 - :段 比如3-8 /n: 每n单位执行一个, 如:*/8:是隔8小时执行一个命令 ,也可以3-8/8 |
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 43 21 * * * 21:43 执行 15 05 * * * 05:15 执行 0 17 * * * 17:00 执行 0 17 * * 1 每周一的 17:00 执行 0,10 17 * * 0,2,3 每周日,周二,周三的 17:00和 17:10 执行 0-10 17 1 * * 毎月1日从 17:00到7:10 毎隔1分钟 执行 0 0 1,15 * 1 毎月1日和 15日和 一日的 0:00 执行 42 4 1 * * 毎月1日的 4:42分 执行 0 21 * * 1-6 周一到周六 21:00 执行 0,10,20,30,40,50 * * * * 每隔10分 执行 */10 * * * * 每隔10分 执行 * 1 * * * 从1:0到1:59 每隔1分钟 执行 0 1 * * * 1:00 执行 0 */1 * * * 毎时0分 每隔1小时 执行 0 * * * * 毎时0分 每隔1小时 执行 2 8-20/3 * * * 8:02,11:02,14:02,17:02,20:02 执行 30 5 1,15 * * 1日 和 15日的 5:30 执行 00 3 * * * 每天凌晨3点 |
添加成功会有crontab: installing new crontab
2.在上面的文件中加入
1 | */8 * * * * mkdir /Desktop/$(date +\%Y\%m\%d\%H\%M\%S) |
意思:每隔8分钟执行后面命令,也是在Desktop目录下创建文件夹(⚠️注意:上面路径要正确。⚠️date +\%Y ,date后要有个空格)
1 2 3 4 5 | 注意 “ % ” 在 crontab 文件中,有结束命令行、换行、重定向的作用, 前面加 ” \ ” 符号转意,否则,“ % ” 符号将执行其结束命令行 或者换行的作用,并且其后的内容会被做为标准输入发送给前面的命令。 |
可以用crontab -l
查看添加的是否正确,虽然添加了任务,但是cron的进程没有启动不会执行,不会监听任务
3.查看cron是否后台开启
1 | ps aux|grep cron 或者 pgrep cron |
4.查看到执行任务命令之后在日志中的信息反馈 sudo tail -f /var/log/system.log
5.删除任务 crontab -r
❌:定时任务没有执行
1.权限问题 没有x 2.路径问题 3.时间差问题 4.变量问题 5.非Ubuntu没有开启 6.命令有误
crontab总结
crontab -e
添加任务会在/var/spool/cron/crontabs
添加一个该用户自己的任务文档,为了隔离.- 系统级别的用
sudo
权限编辑/etc/crontab
文件就行 - cron最小单位是分钟,每分钟去读
/etc/crontab
和/var/spool/cron/crontabs
里内容
1 2 3 4 5 6 7 | 每个目录的作用(系统默认的执行时间可以修改): /etc/cron.daily,目录下的脚本会每天执行一次,在每天的6点25分时运行; /etc/cron.hourly,目录下的脚本会每个小时执行一次,在每小时的17分钟时运行; /etc/cron.monthly,目录下的脚本会每月执行一次,在每月1号的6点52分时运行; /etc/cron.weekly,目录下的脚本会每周执行一次,在每周第七天的6点47分时运行; |
crontab是Linux系统中添加计划定时任务不可少的工具。