crontab 入门:写第一个定时任务
你有没有遇到过这样的场景:每天早上要手动备份一次文件,每隔一小时清理一次日志,或者每周一提醒自己检查磁盘空间。这些重复的事,其实不用天天盯着做,Linux 里有一个老牌工具可以帮你自动完成,它就是 crontab。
一、crontab 是什么
crontab 是 Linux 系统里用来设置周期性任务的工具,背后由 cron 守护进程负责执行。你只需要写一行规则,告诉系统“什么时间、执行什么命令”,剩下的就交给系统去办。
和一次性的延时执行不同,crontab 适合“每隔多久就做一次”的任务。比如每天凌晨备份数据、每小时清理缓存、每月 1 号生成报表,都是它的典型用法。
二、时间格式:五个字段要记牢
crontab 的每一行由六部分组成:分、时、日、月、周,再加上要执行的命令,写的时候从左到右依次是:
* * * * * 要执行的命令
每个星号代表一个时间字段,取值范围分别是:分钟 0 到 59,小时 0 到 23,日期 1 到 31,月份 1 到 12,星期 0 到 7,其中 0 和 7 都表示星期日。星号表示“每一个”,比如第一个字段写星号,就是每分钟执行一次。
三、写第一个定时任务
先确认 cron 服务正在运行,再打开 crontab 编辑器:
systemctl status cron
crontab -e
第一次打开时会让你选择编辑器,初学者选 nano 就可以了,它的操作提示都显示在屏幕下方,上手最容易。在编辑器里加上一行:
0 2 * * * /home/用户名/backup.sh >> /home/用户名/backup.log 2>&1
这一行的意思是:每天凌晨 2 点执行备份脚本,并把正常输出和错误输出都写进日志文件。保存退出后,任务就立即生效了,不需要重启任何服务。
四、常用写法对照
- 每 5 分钟执行一次:*/5 * * * *
- 每天 8 点 30 分执行:30 8 * * *
- 每周一早上 9 点执行:0 9 * * 1
- 每月 1 号凌晨执行:0 0 1 * *
记住一个小规律:想表达“每隔多久”就用星号加斜杠加数字,想表达“固定在某个时间”就直接写数字。
五、新手最容易踩的四个坑
第一,命令要用绝对路径。crontab 执行任务时的环境变量很少,写相对路径很容易找不到文件,脚本路径和命令路径都要写完整。
第二,百分号要转义。命令里的百分号在 crontab 里有特殊含义,如果命令中非要用它,记得先写成反斜杠加百分号。
第三,任务没有执行,先看日志。Ubuntu 或 Debian 系统可以用 grep CRON /var/log/syslog 查找执行记录,CentOS 一系则查看 /var/log/cron,多数问题都能从日志里找到原因。
第四,先在命令行手动跑一遍。脚本在终端里能正常运行,再交给 crontab,这样可以排除大部分权限和路径问题,定位起来也快得多。
六、查看与删除任务
查看当前用户的全部定时任务,用 crontab -l;删除全部任务,用 crontab -r,执行前务必再三确认,因为它不经过回收站,删了就找不回来。只想改其中某一行时,用 crontab -e 进去修改保存即可。
结语
crontab 的学习成本很低,掌握五个时间字段和几个常用命令,就能把每天重复的琐事交给系统。从今天开始,试着把一件每天手动做的事写成定时任务,你会发现省下来的时间,远比想象中多。
- 点赞
- 收藏
- 关注作者
评论(0)