cron定时任务入门:让脚本每天自动跑一次
每天打开电脑,第一件事就是手动跑一遍备份脚本、清理一次日志、拉一次数据?这些重复活完全可以交给 cron,让系统在固定时间替你跑。下面用最直白的方式讲清 crontab 的五段时间格式和常见坑。
先认识一行定时任务
打开终端,输入 crontab -e,就能编辑属于当前用户的定时任务表。每一行就是一个任务,格式固定为五个时间字段加一条命令:
分 时 日 月 周 命令
例如每天凌晨两点半跑一次备份脚本:
30 2 * * * /home/user/backup.sh >> /home/user/backup.log 2>&1
从左到右依次是:分钟(0-59)、小时(0-23)、一个月中的第几天(1-31)、月份(1-12)、一周中的第几天(0-7,其中 0 和 7 都表示周日)。星号表示每一个都算,比如小时写星号就是每小时都跑。
记住几个常用写法
星号是通配,逗号是列举,横杠是范围,斜杠是步长。组合起来基本能覆盖日常需求:
*/10 * * * * /home/user/check.sh
0 9 * * 1-5 /home/user/workday.sh
0 0 1 * * /home/user/monthly.sh
0 8,20 * * * /home/user/twice.sh
第一行每 10 分钟跑一次,第二行只在工作日早上 9 点跑,第三行每月 1 号午夜跑,第四行每天早上 8 点和晚上 8 点各跑一次。刚开始记不住时,先把时间写成一句话,再翻译成五个字段,错的概率会小很多。
新手最容易踩的三个坑
第一个坑是环境变量。cron 执行时的环境比交互终端干净得多,PATH 往往很短,平时在终端能直接敲的命令,在 cron 里可能找不到。稳妥做法是在脚本里写命令的绝对路径,或者在脚本开头自己 export PATH。
第二个坑是相对路径。脚本里写 ./data 或者 output.txt,cron 运行时的当前目录不一定是你以为的目录,结果文件可能跑到别处。凡是涉及文件读写,一律写绝对路径,日志也重定向到固定文件。
第三个坑是权限和可执行位。脚本要先 chmod +x,加上可执行权限;再用 crontab -l 确认任务真的写进去了,不要只凭感觉以为保存成功。
没跑起来怎么查
先看日志。把命令的输出重定向到一个日志文件,例如 >> /home/user/task.log 2>&1,标准输出和错误输出都会留下痕迹。再看系统日志,常见的有 /var/log/cron 或 journalctl -u cron,不同发行版位置略有不同。
如果日志完全没有新内容,先检查 cron 服务是否在运行,再检查时间字段有没有写反。最常见的写反是把分和时颠倒:30 2 是凌晨两点半,2 30 则根本不合法。改完后不要等到明天验证,可以把时间临时改成最近的一两分钟,确认能跑通再改回正式时间。
一个稳妥的上手流程
先写一个只做一件事的小脚本,比如往日志里写一行当前时间;手动跑一次确认没问题;再用 crontab 加一行最近几分钟的任务验证;最后改成每天凌晨或早上等低峰时间,并保留日志文件。
定时任务的价值不在复杂,而在稳定。一个每天准时跑、跑完有日志、出错能查到的简单任务,远胜于一个功能很多却没人敢动的复杂任务。从今天起,把每天重复的那一件小事交给 cron,你会立刻感受到时间的回流。
- 点赞
- 收藏
- 关注作者
评论(0)