Linux中的计划任务(crontab)详解

news2025/3/10 10:49:44

🐇明明跟你说过:个人主页

🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》🏅

🔖行路有良友,便是天堂🔖

目录

一、前言

1、Linux的起源与发展

2、什么是计划任务(crontab) 

二、crontab基础 

1、crontab的工作原理

2、crontab的组成部分(时间字段、命令字段)

3、查看、编辑和删除crontab任务的方法 

三、crontab时间表达式 

1、时间表达式的格式

2、时间字段的详细解释(分钟、小时、日期、月份、星期) 

四、编写和管理crontab任务 

1、编写基本的crontab任务

2、使用脚本文件执行复杂任务 


一、前言

1、Linux的起源与发展


1991年,芬兰赫尔辛基大学的学生林纳斯·托瓦兹(Linus Torvalds)开始编写一个新的操作系统内核,这个内核最初被称为“Freax”。他的初衷只是想学习操作系统内核的开发,并为自己的个人计算机编写一个操作系统。然而,当他将这个内核发布在Internet上并开放源代码后,全球各地的程序员开始参与到这个项目中来,共同完善这个内核。最终,这个内核被命名为Linux,这个名字是由Linus Torvalds的名字和Unix操作系统的名字组合而成的。

Linux从一开始就坚持源代码的公开和免费使用,任何人都可以对其进行修改和分发。这种开放性和自由性吸引了大量的开发者和用户,使得Linux逐渐成长并成熟起来。如今,Linux已经发展成为一个性能稳定、功能强大的多用户网络操作系统,支持32位和64位硬件,能运行主要的Unix工具软件、应用程序和网络协议。同时,Linux也有上百种不同的发行版,如基于社区开发的Debian、ArchLinux,以及基于商业开发的Red Hat Enterprise Linux、SUSE、Oracle Linux等。

2、什么是计划任务(crontab) 

计划任务(crontab)是指在Linux系统中,利用cron(crond)这个系统服务来控制的定时执行工具,它允许用户创建和管理计划任务,以便在特定的时间间隔或时间点自动运行命令或脚本。

Crontab是cron table的缩写,其中cron是Unix系统中的一个后台进程,用于执行预定的任务。Crontab文件包含一系列计划任务条目,每个条目都定义了一个任务的执行时间和要运行的命令或脚本。这些任务可以按照分钟、小时、日、月和星期等不同的时间单位进行安排。

 

二、crontab基础 

1、crontab的工作原理

crontab 的工作原理主要基于系统中的 cron 守护进程。当用户创建或编辑 crontab 文件并保存后,cron 守护进程会定期检查 crontab 文件的内容,并根据其中定义的任务调度规则执行相应的命令或脚本。

具体来说,crontab 的工作原理可以分为以下几个步骤:

  1. 定时任务调度规则定义:用户通过编辑 crontab 文件来定义需要定时执行的任务以及执行的时间规则。每个定时任务都有一个时间规则,指定了任务应该在何时执行,以及执行的频率。
  2. cron 守护进程检查:cron 守护进程会定期检查系统中所有用户的 crontab 文件,并根据其中定义的任务调度规则来决定是否执行相应的任务。默认情况下,cron 守护进程每分钟都会检查一次 crontab 文件。
  3. 任务执行:当到达任务指定的执行时间时,cron 守护进程会启动一个新的 shell 进程,并在其中执行相应的命令或脚本。这些命令或脚本可以是任意的可执行文件,甚至是系统命令、系统脚本或用户自定义的脚本。
  4. 输出和日志记录:任务执行完成后,cron 守护进程会将任务的输出发送到指定的邮箱(如果有设置的话),并将任务的执行情况记录到系统日志文件中,以供用户查看和分析。
  5. 循环检查:cron 守护进程会一直运行在后台,并循环执行上述步骤,定期检查 crontab 文件并执行相应的任务,直到系统关闭或 cron 服务停止运行。

 

crontab 的工作原理是基于系统中的 cron 守护进程定期检查 crontab 文件,并根据其中定义的任务调度规则执行相应的任务。通过这种方式,用户可以方便地设置和管理系统中的定时任务,实现自动化的任务调度和执行。

 

2、crontab的组成部分(时间字段、命令字段)

1. 时间字段:

  • 时间字段由五个部分组成,每个部分用空格分隔。这五个部分分别表示分钟(0-59)、小时(0-23)、日期(1-31)、月份(1-12)和星期(0-7,其中0和7都表示星期日)。
  • 在时间字段中,可以使用一些特殊字符来定义任务的执行时间。例如,星号(*)表示匹配所有可能的值,逗号(,)用于指定多个值,连字符(-)用于指定一个范围,斜杠(/)用于指定一个步长(即执行频率)。

2. 命令字段:

  • 命令字段是crontab中用于指定要执行的命令或脚本的部分。它位于时间字段之后,与时间字段之间用空格分隔。
  • 在命令字段中,可以指定任何有效的shell命令或脚本路径。当crontab根据时间字段确定需要执行任务时,它会启动一个新的shell进程来执行该命令或脚本。

 

3、查看、编辑和删除crontab任务的方法 

在 Linux系统中,我们可以使用以下命令来查看、编辑和删除 crontab 任务:

1. 查看 crontab 任务:

  • 使用 crontab -l 命令可以查看当前用户的 crontab 任务列表。执行该命令后,系统会将当前用户的所有定时任务列出来,并显示其具体的执行时间规则和要执行的命令或脚本。


2. 编辑 crontab 任务:

  • 使用 crontab -e 命令可以编辑当前用户的 crontab 任务列表。执行该命令后,系统会打开一个文本编辑器,用户可以在其中编辑定时任务的时间规则和要执行的命令或脚本。编辑完成后保存并退出编辑器即可,系统会自动更新 crontab 文件。


3. 删除 crontab 任务:

  • 使用 crontab -r 命令可以删除当前用户的所有 crontab 任务。执行该命令后,系统会提示用户确认是否删除所有定时任务,确认后系统会将当前用户的 crontab 文件清空,即删除所有定时任务。


这些命令对当前用户的 crontab 文件进行操作,需要注意的是,编辑 crontab 文件时需要有相应的编辑器权限。通常情况下,这些命令需要在终端中使用,用户可以直接在命令行中输入以上命令并按回车键执行。

三、crontab时间表达式 

1、时间表达式的格式

crontab 时间表达式的格式由五个字段组成,每个字段表示一个时间单位,分别是分钟、小时、日期、月份和星期几。

这些字段之间用空格或制表符分隔,总共有五个字段,每个字段的取值范围和特殊字符如下:

  • 分钟 (0-59):表示每小时的第几分钟执行任务。
  • 小时 (0-23):表示一天中的第几个小时执行任务。
  • 日期 (1-31):表示一个月中的第几天执行任务。
  • 月份 (1-12):表示一年中的第几个月执行任务。
  • 星期 (0-7):表示一周中的第几天执行任务,其中 0 和 7 都代表星期日。

 

除了上述的数值范围外,还可以使用特殊字符来表示一些特殊的时间点,如下:

  • *:表示所有可能的值,表示在所有时间点都执行任务。
  • ,:用于分隔多个值,表示多个时间点执行任务。
  • -:用于指定一个范围内的连续值,表示一个范围内的时间点执行任务。
  • /:用于指定一个步长,表示每隔一定时间执行任务。

 

例如,下面是一些常见的 crontab 时间表达式示例:

  • 0 3 * * *:表示每天凌晨 3 点执行任务。
  • 30 7 * * *:表示每天早上 7 点 30 分执行任务。
  • 0 0 1 * *:表示每个月的第一天凌晨 0 点执行任务。
  • 0 0 * * 1:表示每周一凌晨 0 点执行任务。
  • */5 * * * *:表示每隔 5 分钟执行任务。

 

2、时间字段的详细解释(分钟、小时、日期、月份、星期) 

分钟(Minute):

  • 含义:表示每小时中的哪一分钟执行任务。
  • 取值范围:0到59。
  • 示例:如果设置为10,则任务将在每小时的第10分钟执行。


小时(Hour):

  • 含义:表示一天中的哪个小时执行任务。
  • 取值范围:0到23。其中,0表示午夜,23表示晚上11点。
  • 示例:如果设置为8,则任务将在每天的上午8点执行。


日期(Day of the month):

  • 含义:表示一个月中的哪一天执行任务。
  • 取值范围:1到31。
  • 示例:如果设置为15,则任务将在每月的第15天执行。
  • 注意:日期和星期字段是互斥的,即如果日期字段被指定了具体的值,那么星期字段通常应该设置为*(表示每天),或者留空。


月份(Month):

  • 含义:表示一年中的哪个月执行任务。
  • 取值范围:1到12。也可以使用缩写的月份名称,如Jan、Feb、Mar等。
  • 示例:如果设置为6,则任务将在每年的6月执行。


星期(Day of the week):

  • 含义:表示一周中的哪一天执行任务。
  • 取值范围:0到7,其中0和7都表示星期日,1表示星期一,依此类推。也可以使用缩写的星期名称,如Sun、Mon、Tue等。
  • 示例:如果设置为1,则任务将在每周的星期一执行。
  • 注意:星期和日期字段是互斥的,即如果星期字段被指定了具体的值,那么日期字段通常应该设置为*(表示每天),或者留空。

   

四、编写和管理crontab任务 

1、编写基本的crontab任务

当编写基本的 crontab 任务时,需要确定任务的执行时间规则和要执行的命令或脚本。

假设我们要设置一个每天凌晨 3 点执行备份数据库的任务,执行的命令是 /usr/bin/backup.sh。

编辑 crontab 文件:
使用 crontab -e 命令编辑当前用户的 crontab 文件。

添加任务:
在编辑器中添加以下内容:

0 3 * * * /usr/bin/backup.sh


这行内容表示在每天凌晨 3 点执行 /usr/bin/backup.sh 脚本。

保存并退出编辑器:
根据编辑器的操作提示,保存并退出编辑器。

任务添加完成后,crontab 将会自动根据设定的时间规则执行相应的命令或脚本。在这个示例中,每天凌晨 3 点会执行备份数据库的脚本 /usr/bin/backup.sh。

  

2、使用脚本文件执行复杂任务 

当需要执行复杂的定时任务时,通常的做法是将这些任务封装到一个脚本文件中,然后在crontab中调用这个脚本文件。这样可以使任务管理更加清晰和可维护。

以下是如何使用脚本文件执行复杂任务的步骤:

1. 编写脚本文件
首先,需要使用脚本语言(如Bash、Python、Perl等)编写一个脚本文件,该文件将包含要执行的复杂任务。

例如,假设有一个Bash脚本文件complex_task.sh,内容如下:

#!/bin/bash  
  
# 这是一个示例脚本,用于执行复杂任务  
  
# 切换到工作目录  
cd /path/to/working/directory  
  
# 执行一些命令或操作  
echo "开始执行复杂任务..."  
# 这里可以添加你的复杂任务逻辑,比如循环、条件判断、调用其他命令等  
# ...  
  
# 假设这里有一些输出或日志记录  
echo "任务执行完毕,结果如下:"  
# ...(输出或记录结果)  
  
# 如果需要,还可以发送通知或邮件  
# ...


确保脚本文件的第一行是正确的shebang(#!/bin/bash或其他使用的解释器的路径),并且文件具有执行权限(可以通过chmod +x complex_task.sh命令添加执行权限)。

2. 在crontab中调用脚本文件


接下来,需要在crontab中设置一个任务来调用这个脚本文件。打开crontab编辑器:

crontab -e


然后添加一行来调用脚本文件,例如:

# 每天中午12点执行complex_task.sh脚本  
0 12 * * * /path/to/complex_task.sh


确保提供了脚本文件的完整路径。保存并关闭编辑器后,cron守护进程将自动加载crontab文件并安排任务。

 💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Linux的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1681179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ue引擎游戏开发笔记(41)——行为树的建立(2)--丰富ai行为:巡逻后返回原处

1.需求分析: 就敌人ai而言,追踪到敌人有可能丢失目标,丢失目标后应该能返回原来位置,实现这一功能。 2.操作实现: 1.思路:利用clear value函数,禁用掉当前的追踪功能,执行之后的返…

Java环境搭配(一)JDK下载以及介绍、path环境变量配置

目录 JDK Development Kit (JDK) 下载 JDK介绍 : JDK 包括以下主要组件 配置path环境变量 在cmd上打印Helloworld JDK Development Kit (JDK) 下载 下载官方地址 www.oracle.com 进入网址后: 点击产…

构建智慧设施管理平台:数字化引领未来建筑行业发展

随着城市化进程的不断推进和建筑行业的持续发展,智慧设施管理平台的重要性日益凸显。在这一背景下,构建智慧设施管理平台成为推动建筑行业数字化转型的关键举措。本文将深入探讨智慧设施管理平台的构建与优势,助力建筑企业把握数字化转型的主…

山东大学机器学习实验lab9 决策树

山东大学机器学习实验lab9 决策树 所有公式来源于<<机器学习>>周志华github上有.ipynb源文件 修改&#xff1a; 2024 5.15 添加了一些Node属性&#xff0c;用于标记每个Node使用的划分feature的名称&#xff0c;修改后的版本见 github Node 类 构造函数 初始化…

使用Flask-RESTful构建RESTful API

文章目录 安装Flask-RESTful导入模块和类创建一个资源类运行应用测试API总结 Flask是一个轻量级的Python web开发框架&#xff0c;而Flask-RESTful是一个基于Flask的扩展&#xff0c;专门用于构建RESTful API。它提供了一些帮助类和方法&#xff0c;使构建API变得更加简单和高效…

文档分类DPCNN简介(pytorch实现)

文档分类DPCNN简介 DPCNN简介 模型结构区域嵌入等长卷积1/2池化DPCNN模型代码实现 DPCNN简介 论文中提出了一种基于 word-level 级别的网络-DPCNN&#xff0c;由于 TextCNN 不能通过卷积获得文本的长距离依赖关系&#xff0c;而论文中 DPCNN 通过不断加深网络&#xff0c;可以…

家用充电桩远程监控安全管理系统解决方案

家用充电桩远程监控安全管理系统解决方案 在当今电动汽车日益普及的背景下&#xff0c;家用充电桩的安全管理成为了广大车主关注的重点问题。为了实现对充电桩的高效、精准、远程监控&#xff0c;一套完善的家用充电桩远程监控安全管理系统解决方案应运而生。本方案旨在通过先…

6大部分,20 个机器学习算法全面汇总!!建议收藏!(上篇)

前两天有小伙伴说想要把常见算法的原理 公式汇集起来。 这样非常非常方便查看&#xff01;分为上下两篇&#xff0c;下篇地址&#xff1a; 本次文章分别从下面6个方面&#xff0c;涉及到20个算法知识点&#xff1a; 监督学习算法 无监督学习算法 半监督学习算法 强化学习…

【阿里云】云服务器ECS运行node服务

本文介绍如何在&#xff08;CentOS 7.9 64位&#xff09;操作系统的ECS实例上&#xff0c;安装Node.js并部署测试项目。 使用工具&#xff1a;FinalShell4.3.10 目录 步骤一&#xff1a;部署Node.js环境 1.远程连接已创建的ECS实例。 2.部署Node.js环境。 a.安装分布式版本管…

人机协同中的比较、调整与反转

人机协同是指人与机器之间的合作关系&#xff0c;通过共同努力实现特定任务的目标。在人机协同中&#xff0c;存在着比较与调整的过程&#xff0c;这是为了实现更好的合作效果和任务完成质量。 比较是指人与机器在任务执行过程中对彼此的表现进行评估和比较。这可以通过对机器的…

如何下载小米壁纸到本地分享给他人

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 操作方法 📒🚥 注意事项⚓️ 相关链接 ⚓️📖 介绍 📖 你是否曾被小米主题壁纸软件中的精美壁纸所吸引,却苦于无法将其下载到本地或与朋友分享?本文将为你揭晓如何将小米壁纸下载到本地分享给他人! 🏡 演示环境 �…

图文教程 | 2024年最新VSCode下载和安装教程c/c++环境配置,json文件详解,实用插件分享

前言 &#x1f4e2;博客主页&#xff1a;程序源⠀-CSDN博客 &#x1f4e2;欢迎点赞&#x1f44d;收藏⭐留言&#x1f4dd;如有错误敬请指正&#xff01; 由于重装电脑&#xff0c;需要重新安装VsCode&#xff0c;记录安装配置过程。 一、VSCode下载 官网地址&#xff1a; Vis…

Spring Security实现用户认证二:前后端分离时自定义返回Json内容

Spring Security实现用户认证二&#xff1a;前后端分离时自定义返回Json内容 1 前后端分离2 准备工作依赖WebSecurityConfig配置类 2 自定义登录页面2.1 Spring Security的默认登录页面2.2 自定义配置formLogin 3 自定义登录成功处理器4 自定义登录失败处理器5 自定义登出处理器…

5万字带你一文看懂自动驾驶之高精度地图前世今生

在讲解高精度地图之前&#xff0c;我们先把定位这个事情弄清楚&#xff0c;想明白&#xff0c;后面的事情就会清晰很多&#xff0c;自古哲学里面讨论的人生终极问题&#xff0c;无非就三个&#xff0c;我是谁&#xff0c;我从哪里来&#xff0c;我要去哪里&#xff0c;这里的位…

语言模型测试系列【8】

语言模型 文心一言星火认知大模型通义千问豆包360智脑百川大模型腾讯混元助手Kimi Chat商量C知道 这次的测试比较有针对性&#xff0c;是在使用钉钉新推出的AI助理功能之后发现的问题&#xff0c;即创建AI助理绑定自己钉钉的知识库进行问答&#xff0c;其中对于表结构的文档学…

Vue3商城后台管理实战-用户登录界面设计

界面设计 此时界面的预览效果如下&#xff1a; 登录界面的完整代码如下&#xff1a; <script setup> import {reactive} from "vue/reactivity";const form reactive({username: "",password: "", })const onSubmit () > {} <…

多点 Dmall x TiDB:出海多云多活架构下的 TiDB 运维实战

作者&#xff1a;多点&#xff0c;唐万民 导读 时隔 2 年&#xff0c; 在 TiDB 社区成都地区组织者冯光普老师的协助下&#xff0c;TiDB 社区线下地区活动再次来到成都。来自多点 Dmall 的国内数据库负责人唐万民老师&#xff0c;在《出海多云架构&#xff0c;多点 TiDB 运维…

【class9】人工智能初步(处理单张图片)

Class9的任务&#xff1a;处理单张图像 为了更高效地学习&#xff0c;我们将“处理单张图像”拆分成以下几步完成&#xff1a; 1. 读取图像文件 2. 调用通用物体识别 3. 提取图像分类信息 4. 对应分类文件夹还未创建时&#xff0c;创建文件夹 5. 移动图像到对应文件夹 0.获取…

Qt---TCP文件传输服务器

文件传输流程&#xff1a; 服务器端&#xff1a; serverwidget.ui serverwidget.h #ifndef SERVERWIDGET_H #define SERVERWIDGET_H#include <QWidget> #include<QTcpServer>//监听套接字 #include<QTcpSocket>//通信套接字 #include<QFile> #includ…

查看Linux系统是Ubuntu还是CentOS

要查看Linux系统是Ubuntu还是CentOS&#xff0c;可以通过多种方式进行确认&#xff1a; 查看/etc/os-release文件&#xff1a; 在终端中执行以下命令&#xff1a; cat /etc/os-release 如果输出中包含"IDubuntu"&#xff0c;则表示系统是Ubuntu&#xff1b;如果输出中…