crontab 入门:让你的脚本每天定时自己跑起来
很多重复活其实不用人每天动手:定时备份、每天拉一次数据、每周清理一次日志——Linux 自带的 crontab 就是干这个的。它像一个闹钟,你把“几点、做什么”写好,系统到点就自动执行,不用你守在电脑前。
一、crontab 的五段式时间写法
打开 crontab 很简单,crontab -e 就能编辑。每一行就是一个任务,格式固定是五段:分 时 日 月 星期 + 要跑的命令。比如每天早上 8 点跑一次备份脚本:
0 8 * * * /home/user/backup.sh
五个星号位置依次是:分钟(0-59)、小时(0-23)、日期(1-31)、月份(1-12)、星期(0-7,0 和 7 都是周日)。星号表示“每”,所以 0 8 * * * 就是“每天 8 点 0 分”。想每 10 分钟跑一次,写成 */10 * * * *;想工作日早上 9 点跑,写成 0 9 * * 1-5。
刚开始记不住顺序很正常,记住一个口诀就行:从小到大——分、时、日、月、星期,粒度越来越粗。
二、写进 crontab 之前,先在命令行跑通
新手最容易犯的错,是把一条没验证过的命令直接塞进 crontab,结果到点没反应,还不知道问题出在哪。正确顺序是:先在终端里手动跑一遍,确认命令本身没问题,再写进 crontab。
另外注意环境差异:crontab 里的环境变量很少,PATH 只有最基本的几项。你在终端里能直接用的命令,在 crontab 里可能因为找不到路径而失败。稳妥的做法是命令里写绝对路径,或者在脚本开头显式写好 PATH。脚本里用到的文件路径也一律写绝对路径,别用相对路径——crontab 执行时的工作目录不一定是你以为的那个。
三、看日志,别让任务“悄悄失败”
crontab 执行失败不会弹窗告诉你,它只会默默地把输出丢掉。所以每条任务最好都把输出重定向到一个日志文件:
0 8 * * * /home/user/backup.sh >> /home/user/backup.log 2>&1
这样任务跑没跑、跑成什么样,打开日志一眼就能看到。排查的时候还可以先看系统日志,确认 cron 服务本身在正常工作。记住:没有日志的定时任务,等于闭着眼睛开车。
四、三个新手常踩的坑
第一个坑:权限问题。脚本在终端里能跑、放进 crontab 就失败,多半是权限或环境变量的差别——先 chmod +x 给脚本加上执行权限,再检查脚本里有没有依赖当前用户环境的配置。
第二个坑:时间写错。比如想写“每天 8 点”却写成 8 0 * * *,那就变成了“每天 0 点 8 分”。改完 crontab 后用 crontab -l 列出来逐行核对一遍,花 30 秒能省掉一整天的排查。
第三个坑:任务重叠。上一轮还没跑完,下一轮又启动了,两个进程互相抢资源。长任务要加锁,或者把间隔拉大;也可以在脚本开头判断一下,有实例在跑就直接退出。
小结
crontab 入门就四件事:记住五段式时间(分时日月星期)、命令先在终端跑通、输出重定向到日志、注意权限和绝对路径。先从一个每天跑一次的小任务开始,比如定时清理临时文件,跑顺了再慢慢加。自动化这件事,最难的永远是第一次——一旦你的第一个定时任务稳定跑起来,后面就都是复制粘贴了。
- 点赞
- 收藏
- 关注作者
评论(0)