cron定时任务入门:让脚本每天自动跑一次

举报
yd_250779715 发表于 2026/11/03 11:53:19 2026/11/03
【摘要】 每天打开电脑,第一件事就是手动跑一遍备份脚本、清理一次日志、拉一次数据?这些重复活完全可以交给 cron,让系统在固定时间替你跑。下面用最直白的方式讲清 crontab 的五段时间格式和常见坑。 先认识一行定时任务打开终端,输入 crontab -e,就能编辑属于当前用户的定时任务表。每一行就是一个任务,格式固定为五个时间字段加一条命令:分 时 日 月 周 命令例如每天凌晨两点半跑一次备份脚...

每天打开电脑,第一件事就是手动跑一遍备份脚本、清理一次日志、拉一次数据?这些重复活完全可以交给 cron,让系统在固定时间替你跑。下面用最直白的方式讲清 crontab 的五段时间格式和常见坑。

先认识一行定时任务

打开终端,输入 crontab -e,就能编辑属于当前用户的定时任务表。每一行就是一个任务,格式固定为五个时间字段加一条命令:

分 时 日 月 周 命令

例如每天凌晨两点半跑一次备份脚本:

30 2 * * * /home/user/backup.sh >> /home/user/backup.log 2>&1

从左到右依次是:分钟(0-59)、小时(0-23)、一个月中的第几天(1-31)、月份(1-12)、一周中的第几天(0-7,其中 0 和 7 都表示周日)。星号表示每一个都算,比如小时写星号就是每小时都跑。

记住几个常用写法

星号是通配,逗号是列举,横杠是范围,斜杠是步长。组合起来基本能覆盖日常需求:

*/10 * * * * /home/user/check.sh
0 9 * * 1-5 /home/user/workday.sh
0 0 1 * * /home/user/monthly.sh
0 8,20 * * * /home/user/twice.sh

第一行每 10 分钟跑一次,第二行只在工作日早上 9 点跑,第三行每月 1 号午夜跑,第四行每天早上 8 点和晚上 8 点各跑一次。刚开始记不住时,先把时间写成一句话,再翻译成五个字段,错的概率会小很多。

新手最容易踩的三个坑

第一个坑是环境变量。cron 执行时的环境比交互终端干净得多,PATH 往往很短,平时在终端能直接敲的命令,在 cron 里可能找不到。稳妥做法是在脚本里写命令的绝对路径,或者在脚本开头自己 export PATH。

第二个坑是相对路径。脚本里写 ./data 或者 output.txt,cron 运行时的当前目录不一定是你以为的目录,结果文件可能跑到别处。凡是涉及文件读写,一律写绝对路径,日志也重定向到固定文件。

第三个坑是权限和可执行位。脚本要先 chmod +x,加上可执行权限;再用 crontab -l 确认任务真的写进去了,不要只凭感觉以为保存成功。

没跑起来怎么查

先看日志。把命令的输出重定向到一个日志文件,例如 >> /home/user/task.log 2>&1,标准输出和错误输出都会留下痕迹。再看系统日志,常见的有 /var/log/cron 或 journalctl -u cron,不同发行版位置略有不同。

如果日志完全没有新内容,先检查 cron 服务是否在运行,再检查时间字段有没有写反。最常见的写反是把分和时颠倒:30 2 是凌晨两点半,2 30 则根本不合法。改完后不要等到明天验证,可以把时间临时改成最近的一两分钟,确认能跑通再改回正式时间。

一个稳妥的上手流程

先写一个只做一件事的小脚本,比如往日志里写一行当前时间;手动跑一次确认没问题;再用 crontab 加一行最近几分钟的任务验证;最后改成每天凌晨或早上等低峰时间,并保留日志文件。

定时任务的价值不在复杂,而在稳定。一个每天准时跑、跑完有日志、出错能查到的简单任务,远胜于一个功能很多却没人敢动的复杂任务。从今天起,把每天重复的那一件小事交给 cron,你会立刻感受到时间的回流。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。