让服务器自己干活:crontab 定时任务从入门到不掉坑
每次都要手动备份、手动清理日志、手动跑脚本?其实一句 crontab 就能让服务器自己按时干活。这篇文章用最小的篇幅讲清楚 crontab 的用法和最容易踩的坑。
一、五分钟上手
终端输入 crontab -e,第一次会让你选编辑器,选 nano 就行。每行一个任务,格式是五个时间字段加命令:
分 时 日 月 周 命令
例如每天凌晨 3 点备份:
0 3 * * * /home/user/backup.sh
常用的几个表达:每天 8 点是 0 8 * * *;每小时的第 30 分是 30 * * * *;每 10 分钟一次是 */10 * * * *。改完保存退出,任务立即生效,不用重启什么服务。
二、三个最容易踩的坑
1. 环境变量不一样。cron 执行任务时的 PATH 和你登录 shell 里的不同,脚本里如果直接写 python 或 mysql 这样的短命令,经常报"command not found"。解决:脚本里用绝对路径,比如 /usr/bin/python3,或在 crontab 顶部加一行 PATH=...
2. 不知道任务跑没跑、跑成什么样。给命令加上日志输出:
0 3 * * * /home/user/backup.sh >> /home/user/backup.log 2>&1
这样 stdout 和 stderr 都会写进日志,出问题先看日志。
3. 命令能用,crontab 里却不执行。九成是路径或权限问题。调试时可以先写成每分钟执行一次(* * * * * date >> /tmp/test.log),确认 cron 本身在跑,再改回真实周期。
三、几个实用命令
crontab -l 查看当前任务;crontab -r 删除全部任务(危险,建议先 -l 备份一份);查看系统级任务在 /etc/cron.d 和 /etc/crontab。
四、进阶一点
如果任务可能重叠(上一次还没跑完下一次又启动),用一个简单的锁文件判断,或者直接上 flock:flock -n /tmp/backup.lock /home/user/backup.sh。
总结:crontab 的学习成本几乎为零,真正值钱的是"日志 + 绝对路径 + 防重叠"这三个习惯。把重复劳动交给定时任务,你才有时间干真正重要的事。
- 点赞
- 收藏
- 关注作者
评论(0)