Linux 定时任务不难:用 cron 把重复活交给服务器自己

举报
yd_298983889 发表于 2026/11/01 08:30:50 2026/11/01
【摘要】 服务器上总有一些活天天重复:备份数据、清理日志、巡检服务状态。靠人记着做,迟早有漏的那一天。Linux 自带的 cron 就是为这种场景准备的:把规则写一次,剩下的交给系统按时执行。cron 的规则只有一行每条任务由五个时间字段加一条命令组成,顺序是:分、时、日、月、周。比如 0 3 * * * 表示每天凌晨 3 点整执行;星号代表「每一个」。想不起来字段顺序时,我一般先写一个几分钟后触发的...

服务器上总有一些活天天重复:备份数据、清理日志、巡检服务状态。靠人记着做,迟早有漏的那一天。Linux 自带的 cron 就是为这种场景准备的:把规则写一次,剩下的交给系统按时执行。

cron 的规则只有一行

每条任务由五个时间字段加一条命令组成,顺序是:分、时、日、月、周。比如 0 3 * * * 表示每天凌晨 3 点整执行;星号代表「每一个」。想不起来字段顺序时,我一般先写一个几分钟后触发的测试时间,确认跑通了再改成正式周期。

三个最常用的例子

一是每天备份:0 3 * * * tar -czf /backup/data-$(date +\%F).tar.gz /srv/data,注意在 crontab 里百分号要转义。二是定期清日志:0 4 * * 1 find /var/log/myapp -name "*.log" -mtime +14 -delete,每周一凌晨删掉两周前的日志。三是存活巡检:*/5 * * * * systemctl is-active --quiet myapp || systemctl restart myapp,每五分钟检查一次服务,挂了就自动拉起。

编辑与查看

用 crontab -e 编辑当前用户的任务表,crontab -l 查看现有任务。保存后立即生效,不需要重启任何服务。系统级的任务还可以直接把脚本放进 /etc/cron.daily/ 目录,省去写时间字段。

新手最容易踩的三个坑

第一,cron 的环境和你登录终端不一样,PATH 很短,命令尽量写绝对路径。第二,脚本里不要依赖「当前目录」,要用到的文件都写全路径,并确认脚本有执行权限。第三,默认情况下任务输出会被投递到本机邮箱,基本没人看;建议统一重定向到日志:>> /var/log/myjob.log 2>&1,出了问题能回溯。

我的小习惯

任何命令先在终端里手动跑通一遍,再写进 crontab;新任务先设成两分钟后执行验证一次,确认日志和结果都对,再改回正式周期。多花这两分钟,能省掉第二天早上发现「昨晚备份根本没跑」的麻烦。把重复活交给 cron,人只负责定期看一眼日志,这才是服务器该有的样子。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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