使用cron定时执行任务

article/2025/9/18 23:20:54

本文主要介绍Unix系统中用于定时执行任务的cron守护程序和crontab配置表的文件格式,并对自动执行脚本文件时的注意事项进行了说明,主要包括以下几个方面:

  • cron守护程序概述
  • crontab配置表
  • crontab配置举例
  • 执行命令脚本

cron是一个用于执行计划任务的机制,通常由cron守护进程、crontab配置文件和cron操作命令三部分组成。cron守护进程会随系统启动,定期读取crontab配置文件,按照设置的时间自动执行任务。crontab命令可用来检查任务的计划和执行情况。

1 cron守护程序概述

cron守护进程通常会随系统启动,然后进入睡眠状态并立即返回。然后,cron实用程序每分钟都会醒来,检查所有存储的crontab表格,检查其中的每个命令,以决定这个命令是否应该在当前时刻被运行。当命令执行时,所有的输出会被发到任务执行者的邮箱里。

同时,cron守护进程还会每分钟检查它的缓冲目录或者/etc/crontab配置文件的的修改时间,以决定是否有人修改过这些文件,并在文件被修改时重新加载。这种机制也保证了新加入的任务最多一分钟就可以被cron守护进程识别和调度。无论什么时候crontab配置文件被修改都不需要重新启动cron守护进程,它会被自动加载和缓存。

2 crontab配置表

Crontab配置表中包含cron守护进程所需要的指令,告诉cron守护进程“在今天的这个时间执行这条命令”。每一个用户都可以有自己的crontab,其中的每一条命令都会以该用户的身份来执行。

在crontab中,空行、开头的空格和制表键会被忽略,以井号开头的行会被认为是注释而忽略。注意,注释不允许与cron命令出现在同一行上,因为他们将被视为命令的一部分。同样,注释不允许与环境变量设置放在同一行上。

Crontab中的每一行都可以看作是一个任务计划,如下图所示。

表中的每一行都是由5个时间字段、1个用户名(组)和1个任务命令组成。cron守护进程检查表中的每一个行,当当前时间与设定的时、分、月、日或星期相匹配时,这个任务命令就会被cron守护进程执行。5个时间字段按照以下的顺序排列:

序号

时间字段

允许值

1

分钟

0-59

2

小时

0-23

3

日期

1-31

4

1-12(或者前3个字母表示的英文名称)

5

星期

0-7 (或者前3个字母表示的英文名称)

每一个时间域也可以为“*”,意味着所有段,也可以理解为所有数值全部都满足条件。单个的时间可以用“,”分开,时间范围可以用“-”连接,如“1,3,5-7”等形式。如果时间段有着固定的步长可以使用“*/步长”的方式表示,如:“*/3”可代表“0,3,6,9,...”等。对于月和星期字段,除了使用数字表示以外,也可以使用前3个字母表示的英文名称,大小写忽略。

每行的第5个字段为执行该命令的用户名,第6个字段为具体的命令,包含所有的参数,中间不要换行。

3 crontab配置举例

(1)每小时执行一次

1       *       *       *       *       root    periodic hourly

每小时 01分时执行设定的命令。

(2)每日执行一次

10      3       *       *       *       root    periodic daily

每天的3点10分执行设定的命令。

(3)每周执行一次

15      4       *       *       6       root    periodic weekly

每周六的4点15分执行设定的命令。

(4)每月执行一次

30      5       1       *       *       root    periodic monthly

每月1日5点30分执行设定的命令

(5)每日执行多次

1,31    0-5     *       *       *       root    adjkerntz -a

每日早上0点至5点的1分和31分各执行一次设定的命令

*      */3     *       *       *       root    adjkerntz -a

每隔3小时执行一次

4 定时执行脚本

crontab配置表中第6个字段为任务执行命令,可以填写需要执行的命令及其参数,但是对参数过多或者有几条命令要依次执行时,这个字段就会写得非常冗长,也不利于理解和维护。这时可以将这些复杂的命令写到一个可执行的脚本文件里,在这里只填写这个脚本文件的名字就行了。

在Unix系统中,脚本和命令在执行时的表现差不多,在执行一个命令时往往很难发现执行的是一个二进制命令还是一个Shell脚本。那么将可执行脚本写在这里与将一个命令写在这里有什么区别吗?

在这里还真是有一些区别的。一个最直观的表现就是:在命令行模式下可以正确执行的脚本,放到crontab中却运行不起来。相信已经有很多人都碰到过这种情况,初次碰到时往往不知怎么处理。其实原因很简单,就是“路径”。

cron守护进程在执行设置的命令时,会在自己的初始化环境中运行,这里的路径设置往往只包含/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin,通常不会包含/usr/local/bin路径。如果脚本中有一个不在上述目录下的命令时,cron守护进程就无法找不到这个命令了。所以如果想要让cron守护进程找到脚本中的命令并正确运行,要么以绝对路径来写这条命令,要么就加上特定的PATH路径。通常执行命令时我们都不会用绝对路径来运行,把以路径加到脚本里就成了最便捷的方法了。

#!/bin/shPATH=$PATH:/usr/local/bin
export PATH# write your command here

当然,如果在脚本中用到的命令正好在PATH查找路径中,那么这个脚本头也就不会发挥作用了。需要注意的是,在crontab中写命令时一定要使用绝对路径,否则cron守护程序也是会找不到命令的。


http://chatgpt.dhexx.cn/article/6w5ZWjsP.shtml

相关文章

cron计划任务

这里写目录标题 总结一、cron(crond)简介二、crontab命令1.命令格式:2.命令功能:3.命令参数:第一种形式(将原先存在的文件加入到corn中)第二种形式(用命令行的形式加入到…

Cron表达式

Cron表达式语法 一、结构 corn从左到右(用空格隔开):秒 分 小时 日 月 星期 年 二、各字段的含义 (1)*:表示匹配该域的任意值。假如在Minutes域使用*, 即表示每分钟都会触发事件。 (2&#x…

C语言结构体内存对齐

结构体内存对齐 如何计算结构体的大小? 首先得掌握结构体的对齐规则: 1.第一个成员在与结构体变量偏移量为0的地址处。(将第一个成员放在结构体内存的第0处) 2.其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。(从0地…

C语言结构体对齐详解

文章目录 一、C语言结构体对齐大小快速判断二、反汇编角度看结构体三、总结 一、C语言结构体对齐大小快速判断 在C语言中定义一个结构体&#xff0c;里面具体占用多少个字节呢&#xff0c;先举一个例子&#xff0c;如下&#xff1a; #include<stdio.h> #pragma pack(8)…

C语言结构体传参

目录 C语言结构体传参1. 普通传参1.1 测试代码1.2 测试结果1.3 结果分析 2. 单指针传参2.1 修改结构体数据2.1.1 测试代码2.1.2 测试结果2.1.3 结果分析 2.2 修改结构体地址2.2.1 测试代码2.2.2 测试结果2.2.3 结果分析 3. 双指针传参3.1 测试代码3.2 测试结果3.2 结果分析 C语…

C语言 结构体

1什么是结构体 结构体是一种集合&#xff0c;它里面包含了多个变量或数组&#xff0c;它们的类型可以相同&#xff0c;也可以不同&#xff0c;每个这样的变量或数组都称为结构体的成员。结构的成员可以是标量、数组、指针&#xff0c;甚至是其他结构体。 2结构体的定义 (1&a…

c语言:结构体(详解)

初识结构体 一.结构体声明1.结构体的概念2.声明 二.结构体的基础使用三.结构体变量的定义和初始化四.空结构体五.柔性数组1.定义2.使用 六.结构体内存对齐七.位端 一.结构体声明 1.结构体的概念 结构体是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同…

C语言结构体详解

目录 一、结构体的基本概念 举个例子 二、结构体变量 三、结构体占用的内存情况 举个例子 运行效果 再次运行 四、结构体的变量名 五、结构体初始化 五、结构体初始化 举个例子 运行效果 六、结构体成员的访问 举个例子 运行效果 八、结构体指针 举个例子 运行效…

C语言结构体超详解(小白一看就懂,多维度分析!!!!)

目录 一、前言 二、结构体详解 &#x1f350;什么是结构体 &#x1f34e;结构体的定义与基础结构 &#x1f351;结构体的使用 &#x1f4a6;结构体的初始化 &#x1f4a6;结构体的成员访问 &#x1f4a6;结构体数组 &#x1f4a6;结构体指针--------------指向结构体变…

C语言之结构体(进阶篇)

目录 1.结构体的内存对齐​ 如何计算呢&#xff1f;​ 掌握结构体的对齐规则&#xff1a; 为什么存在内存对齐呢&#xff1f;​ ​​​​​​​offsetof​ 位段​ 什么是位段&#xff1f;​ 比如&#xff1a; 位段的内存分配​ 举个例子 位段的跨平台问题&#xff1a;​ 枚举…

C语言——结构体(全)

目录 一、结构体的设计 二、结构体变量的初始化 2.1结构体在内存表示&#xff1b; 2.2结构体初始化&#xff1b; 2.3结构体指针变量 2.4结构体嵌套结构体 三、结构体成员访问 3.1、结构体成员访问 3.2、结构体变量和指针 ​3.3、结构体和函数 四、结构体与数组 五、…

Github客户端下载慢的解决方法

Github客户端下载慢的解决方法 Github客户端下载解决方法获取下载连接 Github客户端下载 Github客户端的下载地址是——Github客户端下载。 但是下载速度特别慢&#xff0c;最快也就十几K。 解决方法 使用迅雷下载&#xff1a;将Github客户端的下载地址复制到迅雷中&#…

windows平台下使用Github(2 创建代码仓库,安装Github客户端.)

本文会分章节的来介绍如何在windows平台下使用GitHub 一、注册Github账号 查看 二、创建代码仓库&#xff0c;安装Github客户端.查看 三、Github上传和下载(1 客户端方式)查看 四、Github上传和下载(2 命令行方式)查看 1、创建一个代码托管仓库。 点击右上角的 号或者点…

github客户端进行token认证

从 2021 年 8 月 13 日起&#xff0c;GitHub 在对 Git 操作进行身份验证时不再接受帐户密码。您需要添加 PAT&#xff08;个人访问令牌&#xff09;&#xff0c;您可以按照以下方法在您的系统上添加 PAT。 git - Support for password authentication was removed. Please us…

【解决】GitHub 客户端下载后安装在哪里?

GitHub Desktop 配置环境变量GitHub 安装路径GitHub Shell、Bash 环境是 Windows 10。 从 GitHub 官网下载了 GitHub 的 Desktop 版本之后&#xff0c;它其实不仅是一个 GUI&#xff0c;还带了 Shell&#xff08;Bash&#xff09;&#xff0c;但是发现找不到它们是被安装在哪个…

GitHub客户端上传本地代码

创建GitHub账号、安装GitHub客户端登录GitHub网站、在客户端登录账户创建新的代码存放处 填写及勾选一些信息 复制此代码存放处的路径 利用客户端上传代码 第一步&#xff1a;点击第五步的Open in Desktop&#xff0c;打开本地客户端 第二步&#xff1a;点击下图蓝色选中选…

你们心心念念的 GitHub 客户端终于来了!

点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 For something,we cant understand when we are young but by the time we understand,we are no longer young. 有些事情&#xff0c;当我们年轻的时候无法懂得&#x…

GitHub客户端的使用方法

一&#xff1a;创建自己的GitHub账号 GitHub官网链接 https://github.com/ 自行创建账号&#xff0c;因本文主要介绍GitHub客户端的使用方法&#xff0c;所以注册账号略 二&#xff1a;下载GitHub客户端 GitHub客户端下载的官网链接 https://desktop.github.com/ 下载完成之…

gitHub客户端的安装与使用总结

一、第一步 注册github账号 1.注册界面 https://github.com/&#xff0c;如下图&#xff1a; 2.下注册流程 3.上面简单的输入一下用户名、邮箱地址、密码点击创建即可&#xff0c;进入下一步&#xff0c;如下图&#xff1a; 如果勾选了“Help me set up an organization next”…

Github客户端安装使用教程(一)

转载请注明出处&#xff0c;http://blog.csdn.net/bule_zst/article/details/74185268 1. 下载安装 下载地址 下载好后双击运行&#xff0c;这个安装程序比较奇葩&#xff0c;是强制安装路径的&#xff0c;运行后什么界面都没有&#xff0c;后台安装&#xff0c;大概等到你觉…