Linux如何编写cron表达式_Linux cron表达式编写指南

秋雪小哥_8056

秋雪小哥_8056

2026-04-09

132人浏览

原创

linux cron表达式必须严格遵循5字段空格分隔格式,从左到右依次为:分钟(0–59)、小时(0–23)、日(1–31)、月(1–12)、星期几(0–7),其中“日”与“星期几”是“或”关系;步进语法(如/5)仅在支持该范围的字段中有效,星期几字段不支持步进;cron环境极简,需用绝对路径、显式设置path和shell,并重定向输出排查问题;安全测试应先用 验证日志,再收紧表达式,修改后立即生效。

linux如何编写cron表达式_linux cron表达式编写指南

Linux 的 cron 表达式不是“写出来就行”,它必须严格匹配 5 字段空格分隔格式,且每个字段的取值范围、特殊符号行为、环境变量缺失都可能让任务静默失败。

crontab 里这 5 个字段分别代表什么

顺序固定,不可交换,从左到右依次是:

  • 分钟(0–59)
  • 小时(0–23)
  • 日(1–31) — 注意:和 day of week 是“或”关系,任一满足即触发(常被误以为是“且”)
  • 月(1–12)
  • 星期几(0–7,0 和 7 都表示周日)

例如 30 2 * * 1 表示“每周一凌晨 2:30 执行”,但 30 2 1 * 1 表示“每月 1 号 或 每周一”的凌晨 2:30 各执行一次——这点极易导致重复运行。

常见错误:* /5 这类步进写法在哪些位置有效

/ 步进语法只在支持该范围的字段中合法,且不能脱离基础范围使用:

  • ✅ */5 * * * *:每 5 分钟(分钟字段允许 0–59,/5 合理)
  • ✅ 0 */2 * * *:每两小时整点(小时字段 0–23,/2 合理)
  • ❌ * * */5 * *:不是“每 5 天”,而是“每月第 5、10、15…30 日”,但若当月没有 30 日,最后那次不会补到下月 —— 它不跨月计算
  • ❌ * * * * */5:语法错误!星期几字段不支持步进(cron 实现差异大,多数版本直接忽略或报错)

想实现“每 5 天运行一次”,得用脚本判断日期差,cron 本身不提供此能力。

为什么脚本在 crontab 里不执行,但在终端能跑

根本原因是 cron 使用极简环境:PATH 通常只有 /usr/bin:/bin,无用户 profile,无 shell 函数,且工作目录是用户 home。

  • 用绝对路径写命令:把 python script.py 改成 /usr/bin/python3 /home/user/script.py
  • 显式设置必要环境变量:在 crontab 开头加 SHELL=/bin/bash、PATH=/usr/local/bin:/usr/bin:/bin
  • 重定向输出排查问题:*/10 * * * * /path/to/cmd >> /tmp/cron.log 2>&1
  • 避免依赖交互式 shell 特性(如 source ~/.bashrc 或别名),cron 不加载这些

如何安全测试新写的 cron 表达式

不要等明天才看效果。用 systemd-run 或手动模拟是最靠谱的验证方式:

  • 临时触发一次:运行 systemd-run --on-calendar="2024-06-15 14:30:00" --scope -- bash -c 'your_command'(需 systemd 环境)
  • 用在线工具仅作语法初筛(如 crontab.guru),但它无法反映你的 PATH、权限、shell 差异
  • 最稳妥的是:先写成 * * * * *,确认日志能打出,再逐步收紧时间表达式
  • 注意:修改 crontab -e 后无需重启服务,但旧进程不会自动 reload —— 新增条目立即生效,已运行中的任务不受影响

真正难的从来不是写出一个“看起来对”的表达式,而是确保它在无人值守时,在正确的环境、正确的路径、正确的权限下,按你脑中设想的逻辑跑起来 —— 而不是靠猜日志在哪、PATH 是啥、或者某天突然多跑了一次。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java中calendar类的用法
java中calendar类的用法

Java Video类是JavaFX库中的一个类,用于创建和操作视频对象。它提供了方法来加载、播放、暂停、停止和控制视频的音量、速度和循环等属性。想了解更多Java中类的相关内容,可以阅读本专题下面的文章。

2024.02.29

1935

7

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3970

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3393

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2553

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6190

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5842

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3413

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2905

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3139

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习