用 crontab 入门:让 Linux 定时帮你做事
用 crontab 入门:让 Linux 定时帮你做事
每天手动跑备份、清日志、拉数据,重复又容易忘。crontab 是 Linux 自带的定时任务工具:写一行规则,系统就按时间自动执行。学会它,很多重复劳动可以交给机器,自己只负责检查结果。
先认识一行规则
crontab 的每条任务就是一行,格式固定:
分 时 日 月 周 命令
五个时间字段分别表示分钟(0-59)、小时(0-23)、日期(1-31)、月份(1-12)、星期(0-7,0 和 7 都表示周日),后面跟要执行的命令。星号表示“每”,比如:
0 2 * * * /usr/bin/python3 /home/user/backup.py
意思是每天凌晨 2 点整,运行一次备份脚本。字段之间用空格隔开,写的时候注意别多也别少。
写你的第一个定时任务
执行 crontab -e 打开编辑器(第一次会让你选编辑器,选 nano 最顺手),加一行:
0 2 * * * /usr/bin/python3 /home/user/backup.py >> /home/user/backup.log 2>&1
后面那段重定向的意思是把脚本的正常输出和报错都追加写进日志文件。这样任务跑没跑、跑得顺不顺利,事后翻日志就知道。保存退出后,系统会提示安装了新的 crontab,从下一分钟起就开始按规则执行。查看当前任务用 crontab -l,删除全部任务用 crontab -r,不过删除没有确认提示,用之前先想清楚。
常用时间写法
掌握几个常用写法,就能覆盖大多数场景:
每 5 分钟执行一次:*/5 * * * *
工作日早上 9 点执行:0 9 * * 1-5
每月 1 号凌晨执行:0 0 1 * *
每天 8 点半执行:30 8 * * *
每小时的第 10 分钟执行:10 * * * *
斜杠表示“每隔”,逗号可以列举多个值,比如 0 8,12,18 * * * 表示每天 8 点、12 点、18 点各跑一次。先从简单的固定时间开始,熟练了再组合。
三个新手容易踩的坑
第一个坑是环境变量。cron 启动的任务环境非常干净,PATH 很短,系统命令可能找不到。稳妥的做法是命令写绝对路径,比如用 /usr/bin/python3 而不是 python3;脚本里用到的变量,在脚本开头用 export 写死。
第二个坑是百分号。百分号在 cron 规则里有特殊含义,会被当作换行处理。如果命令里本身要用百分号,记得写成反斜杠加百分号。日期格式化命令 date +%Y%m%d 在 cron 里就得写成 date +\%Y\%m\%d,不然会报错。
第三个坑是不看日志。任务没按预期跑,先去日志里找原因:输出重定向到文件是最直接的办法,也可以看系统日志里的 cron 相关记录。先确认规则写对了,再确认脚本在命令行下能手动跑通,最后才怀疑定时本身。
三个实用场景
场景一,每天凌晨备份。把数据库导出、打包压缩、按日期命名写成一个脚本,交给 cron 每天凌晨 2 点跑,早上起来看一眼日志就行。
场景二,定期清理临时文件。每小时清理一次 /tmp 下面超过 7 天的文件:
0 * * * * find /tmp -type f -mtime +7 -delete
配合 -delete 要小心,先不加 -delete 跑一遍确认范围,再加上真正删除。
场景三,每周生成报告。每周一早上 8 点拉取数据、生成一份周报发到指定位置。脚本本身可以很简单,定时让它变得可靠。
小结
定时任务的价值不在复杂,而在稳定:写好一次,每天都省几分钟。先从一行最简单的规则开始,让一个小任务真正跑起来,再慢慢加上日志、清理、报告这些组合。等你发现每天早上打开电脑时,备份、报表、清理都已经默默做完了,就会明白 crontab 是 Linux 里最值得早点学会的工具之一。
- 点赞
- 收藏
- 关注作者
评论(0)