Linux 定时任务:crontab 写法与常见失效原因

crontab 是 Linux 最常用的定时任务工具,很多任务"写了却不执行"往往不是 cron 坏了,而是写法或环境踩了坑。本文把基本写法、常用命令、推荐写法和常见失效原因讲清楚,照着排查,多数问题都能快速定位。

一、crontab 基本写法

crontab 的一行任务由 5 个时间字段加命令组成,依次是:分 时 日 月 周。

举例:

* * * * * 表示每分钟执行一次;

0 2 * * * 表示每天凌晨 2 点执行;

*/5 * * * * 表示每 5 分钟执行一次;

0 9 * * 1 表示每周一上午 9 点执行;

0 0 1 * * 表示每月 1 号 0 点执行。

特殊符号含义:* 表示任意值;, 表示列表;- 表示范围;/ 表示步长。

二、常用操作命令

crontab -e:编辑当前用户的任务;

crontab -l:查看当前用户的任务;

crontab -r:删除当前用户的任务,比较危险,执行前先备份:crontab -l > ~/crontab.bak;

systemctl status cron 或 systemctl status crond:查看定时任务服务状态,不同发行版的服务名不同。

三、推荐写法示例

推荐用绝对路径,并把输出重定向到日志文件,便于排查:

0 2 * * * /usr/bin/python3 /home/user/backup.py >> /home/user/backup.log 2>&1

*/10 * * * * /bin/bash /home/user/check.sh >> /home/user/check.log 2>&1

这样做的好处很直接:命令不会因为 PATH 不同而找不到,脚本出错时也能在日志文件里看到,而不是悄悄失败。

四、常见失效原因与对策

  1. 环境变量不同:cron 的环境很精简,PATH 可能不含 /usr/local/bin。命令请写绝对路径,或在 crontab 开头声明 PATH。

  2. 相对路径失效:脚本里不要依赖当前目录,文件路径一律写绝对路径。

  3. 权限问题:脚本没有可执行权限时先执行 chmod +x;还要确认 cron 用户有权读写目标文件。

  4. % 需要转义:在 crontab 里 % 表示换行,命令中用到 %(如 date +%F)要写成 \%。

  5. 服务没启动或时区不对:先确认 cron/crond 在运行,再用 date 核对系统时区和时间。

  6. 编辑后没保存或写错用户:确认 crontab -l 能看到新任务;系统级任务注意 /etc/crontab 还有用户字段。

  7. 静默失败无日志:务必加 >> 日志 2>&1,否则出错也看不到。

五、排查清单

先用 crontab -l 确认任务存在,再看系统日志(journalctl -u cron 或 journalctl -u crond,也可看 /var/log/cron),再看自己重定向的日志文件,最后手动执行一次脚本命令验证。

结尾:写 crontab 记住三点------绝对路径、重定向日志、先手动跑通。

相关推荐
老约家的可汗1 小时前
Linux开发三件套:make、git、gdb 入门指南
linux·运维·服务器
从琳开始9891 小时前
从Socket到TCP回显服务器:Java网络编程完整指南
java·服务器·网络·tcp/ip·java-ee
分布式存储与RustFS2 小时前
可观测性数据落进对象存储:Proscia 案例拆解与 ClickHouse 自托管配置
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
Sw1zzle2 小时前
Go入门(零):Linux Ubuntu 22.04 安装 Go
linux·ubuntu·golang
device_Any2 小时前
接口文档写着三个字段,接口返回了五个
android·java·linux
安易算力2 小时前
智算中心网络架构:RDMA/IB/以太网选型深度解析与优化实践
网络·架构·php
无足鸟ICT2 小时前
【RHCA+】dstat命令(监控系统资源)
linux·服务器
方便面不加香菜2 小时前
Docker Image-- 镜像命令详解与使用示例
运维·docker·容器
时空无限2 小时前
ubuntu 26.04 sudo 连不上主机卡住然后失败问题处理
linux·服务器·ubuntu