crontab 定时任务入门:从第一条定时任务到避坑清单
每天凌晨三点备份数据库、每周一早上清理日志、每小时同步一次数据——这些重复工作如果靠人手动执行,既容易遗忘,也很难坚持。Linux 系统自带的 crontab 就是为解决这类问题而存在的定时任务工具,它让脚本在指定的时间自动运行,是运维和开发日常工作中最常用的工具之一。
首先要理解两个概念:cron 是后台运行的守护进程,负责按时间表唤醒任务;crontab 则是管理这张时间表的命令。每个用户都有一份属于自己的任务表,互不干扰。查看当前任务用 crontab -l,新建或编辑用 crontab -e,删除全部任务用 crontab -r,操作前最好先备份。
时间表达式是 crontab 的核心,一行任务由五段时间和一条命令组成,依次是分、时、日、月、星期。星号表示每一个,比如 0 2 * * * 表示每天凌晨两点执行,0 9 * * 1 表示每周一上午九点执行,*/10 * * * * 表示每十分钟执行一次。写表达式时先想清楚“多久一次”,再换算成五个字段,必要时用工具校验。
写第一条任务时,建议从一条无害的命令开始,例如每小时往日志文件追加一行时间戳:0 * * * * date >> /tmp/cron-test.log。保存后等待一小时,查看日志文件是否出现新记录,就能确认定时任务已经生效。验证通过后,再把真正的备份脚本、清理脚本放进去。
新手最容易踩的坑有四个。第一,环境变量:cron 的环境非常干净,PATH 很短,脚本里最好写命令的绝对路径,或者在脚本开头重新声明 PATH。第二,相对路径:脚本里不要用相对路径,所有文件路径都写绝对路径。第三,输出去向:命令的标准输出和错误默认会发邮件给系统用户,建议在命令后追加 >> /var/log/xxx.log 2>&1,把日志落到文件里。第四,百分号:crontab 会把命令中的百分号当作换行符处理,需要转义或避免使用。
最后养成两个好习惯:每条任务写一句注释,说明它在做什么;定期执行 crontab -l 检查任务表,删除已经不再需要的任务。定时任务本身很简单,难的是长期的可维护性。把时间表达式写清楚、把日志留下来、把路径写全,一份小小的 crontab 就能稳定地为你工作很多年。
- 点赞
- 收藏
- 关注作者
评论(0)