《Linux cron 定时任务入门:让服务器自己干活》
很多 Linux 新手第一次接触服务器时,都会遇到这样的问题:每天凌晨要备份一次数据库、每周要清理一次日志、每隔几分钟要检查一次服务状态——难道要定闹钟手动执行吗?答案是不用。Linux 自带了一个老牌定时任务工具 cron,它就像一个不知疲倦的值班员,只要你把规则写好,它就会在约定的时间准时执行命令。
cron 是什么
cron 是一个系统守护进程,名字来自希腊语 chronos(时间)。它启动后一直在后台运行,每分钟醒来一次,检查有没有到期的任务。用户通过 crontab(cron table)来管理自己的任务表,一条规则就是一行,写好保存立即生效,不需要重启服务。
五段式时间规则
crontab 的每一行由六部分组成,前五段是时间,最后一段是要执行的命令:
分 时 日 月 周 命令
每一位置的取值范围分别是:分钟 0–59、小时 0–23、日期 1–31、月份 1–12、星期 0–7(0 和 7 都表示星期日)。几个常用符号要先记住:星号 * 表示“每一个”,逗号表示“列举”,横杠表示“范围”,斜杠表示“步长”。例如:
0 2 * * * /home/user/backup.sh
表示每天凌晨 2 点整执行备份脚本。再看一个:
*/10 * * * * /usr/bin/check-service.sh
表示每 10 分钟执行一次服务检查。组合起来也很直观,0 9-18 * * 1-5 就是工作日的每小时整点执行。
上手三步
第一步,编辑自己的任务表,执行 crontab -e。第一次打开可能会让你选编辑器,选自己熟悉的 nano 或 vim 即可。
第二步,把规则写进去,保存退出。建议新手先写一条一分钟后执行的测试任务,比如 * * * * * echo "cron test" >> /tmp/cron-test.log,等一分钟看日志文件里有没有内容,确认规则生效后再换成正式任务。
第三步,用 crontab -l 查看当前任务表,确认无误。删除全部任务用 crontab -r,但要谨慎,这个操作没有二次确认。
新手最容易踩的坑
第一,环境变量。cron 执行时的环境和交互式 shell 不一样,PATH 很短,python、node 这类命令可能找不到。稳妥的做法是在脚本里写命令的绝对路径,或者在 crontab 开头先定义 PATH。
第二,相对路径。cron 的工作目录一般是用户家目录,脚本里用到的文件路径最好都写绝对路径,否则换个目录执行就可能找不到文件。
第三,没有输出就等于没有反馈。cron 默认会把命令的输出发邮件给本机用户,但很多服务器没有配邮件服务,输出就悄悄丢了。建议每条任务都显式重定向日志,例如 >> /var/log/backup.log 2>&1,出问题时有据可查。
第四,权限问题。需要 root 权限的操作要放到 root 用户的 crontab(用 sudo crontab -e 编辑),或者用系统级任务文件 /etc/crontab,不要图省事给脚本加过大的权限。
从定时任务到自动化习惯
掌握 cron 之后,很多重复劳动都可以交给它:凌晨备份数据库、定期清理过期日志、定时同步文件、每小时拉取一次数据。它的规则简单到可以背下来,但带来的时间收益是实打实的。对于刚接触 Linux 的朋友,建议先从一条备份任务开始,把“手动执行”变成“自动执行”,这是走向运维自动化的第一步。
- 点赞
- 收藏
- 关注作者
评论(0)