Liunx计划任务

目录

一.计划任务概念解析

二.Liunx计划任务管理工具

1. at命令

基本语法

时间格式

常用选项

2. crontab命令

crontab 文件

/etc/cron.allow

/etc/cron.deny

使用规则 

crontab 参数

crontab 文件格式

特殊用法

使用技巧与思路扩展: 

步骤

示例


一.计划任务概念解析

        计划任务在计算机领域指的是预先设定的任务,按照指定的时间或条件自动执行。它们通常用于自动化重复性操作、系统维护、数据备份、系统监控、报告生成等。计划任务的核心概念包括以下几个方面:

时间表

计划任务需要指定何时执行任务。时间表可以是固定的时间点,也可以是基于某些条件的动态时间。最常用的方式是基于日期和时间的调度,这种情况下,任务可能每天、每周、每月、甚至每年运行。

自动化

计划任务的主要目的是自动化操作,这样可以减少人工干预,提高效率,降低人为错误的风险。计划任务可以执行脚本、程序、命令等,确保系统按预期运行。

任务的重复性

计划任务通常是周期性的。这意味着任务可能每天、每周、每月甚至每年运行。任务重复的频率取决于实际需求。

任务执行环境

计划任务执行时需要在特定环境中运行,包括用户权限、运行路径、环境变量等。这些环境参数在计划任务中设置后会影响任务的执行效果。

二.Liunx计划任务管理工具

在Linux系统中,主要有两个工具用于管理计划任务:cron和at。 RHEL6系统中默认已安装了at、crontab软件包,通过atd和crond这两个系统服务实现一次性、周期性计划任务的功能,并分别通过at、crontab命令进行计划任务设置。

1. at命令

at命令是用来在指定的时间执行一次相应的命令或任务。也就是说,这是一种单次的、一次性的命令调度。你可以使用任何可以解析为特定时间的字符串来调度任务。在这之前,我们学习使用centos7系统默认没有拉at的包,因此我们需要下载并启动服务。

yum install at -y      #下载
systemctl start atd    #启动服务
systemctl enable atd   #开机自启

基本语法

at [选项] [时间]
  • 选项:用于控制at命令的行为。包括读取任务来源、发送邮件等。 
  • 时间:指定任务执行的时间。可以使用各种格式,如绝对时间、相对时间、日期等。

时间格式

at命令的时间参数可以接受多种格式。常见的时间指定方式包括:

绝对时间

  • 小时:分钟:指定任务执行的具体时间。例如,14:00表示下午2点。
  • 小时:分钟 [AM/PM]:指定上午或下午。例如,2pm表示下午2点。

相对时间

  • now + 时间量:以当前时间为基准,增加一定的时间量。例如,now + 1 hour表示一小时后执行任务。
  • now + 天数 days:表示从现在起若干天后。例如,now + 2 days表示两天后。

日期

  • 日期/时间:指定特定日期和时间。例如,12:30 12/25/2024表示在2024年12月25日中午12:30执行任务。
  • 明天或后天:可以使用tomorrowyesterday。例如,3pm tomorrow表示明天下午3点。
  • 星期几:可以使用星期几的名称。例如,next Monday表示下周一。

常用选项

  • -f filename:从文件中读取任务。
  • -m:任务执行完成后发送邮件给任务所有者。
  • -latq:列出当前用户的计划任务。
  • -c job_number:查看特定任务的详细信息。
  • -d job_numberatrm job_number:删除指定任务。

以下是一些at命令的示例: 

在1小时后执行任务
echo "echo 'Hello, World!'" | at now + 1 hour在下午2点执行任务
echo "echo 'Running at 2pm'" | at 2pm在明天下午3点执行任务
echo "echo 'Task for tomorrow'" | at 3pm tomorrow从文件中读取任务
echo -e "echo 'Task 1'\necho 'Task 2'" > /tmp/my_tasks
at -f /tmp/my_tasks 9am以上是编写任务的一种方式
实际上我们也可以通过直接输入命令,使用ctrl+d 结束
[root@localhost ~]# at now + 1 hour                 #在一小时后执行任务
at> echo 'Hello, World!'
at> <EOT>         #这行在我们输入命令结束后,使用ctrl+d结束编辑即可,就会出现这样的标识
job 2 at Fri May 10 00:10:00 2024
[root@localhost ~]# 查看当前用户的计划任务
[root@localhost ~]# atq
1	Fri May 10 00:07:00 2024 a root
2	Fri May 10 00:10:00 2024 a root
#第一列是任务编号。在您提供的输出中,任务编号为1和2。这是用来标识计划任务的唯一标识符。
#第二、第三和第四列表示任务的计划执行时间。
#第五列为任务状态。字母a表示任务已安排且正在等待执行。这是默认状态
#最后一列是任务的所有者。查看特定任务的详细信息
at -c 1              #1就是任务编号删除计划任务
atrm 1              #1就是任务编号

2. crontab命令

crontab命令则用于执行周期性的任务。你可以设定一个任务在每天、每周、每月的特定时间执行。crontab的配置文件被分为6个字段,分别表示分钟(0-59)、小时(0-23)、一个月中的某日(1-31)、月份(1-12)、一周中的某日(0-7,0和7都表示星期日)、以及需要执行的命令。

crontab 文件

每个用户可以拥有自己的crontab文件,用于定义定时任务。系统还有一个全局crontab文件,通常位于 /etc/crontab,用于定义系统级任务。CentOS/RHEL:在这些系统中,crontab文件存储在 /var/spool/cron/。这个目录下会有对应于各个用户的crontab文件。当然,不同的liunx发行版这个路径可能会有不同。

[root@localhost ~]# crontab -u root -e         #指定root用户编辑计划任务
crontab: installing new crontab
[root@localhost ~]# crontab -u lzz -e          #指定普通用户编辑拉计划任务
crontab: installing new crontab 
[root@localhost ~]# cd /var/spool/cron/        
[root@localhost cron]# ll 
总用量 8                           #这里看到的就是用指定用户的名字命名的计划任务的文件拉
-rw------- 1 root root 25 5月  10 00:00 lzz
-rw------- 1 root root 23 5月  10 00:00 root
[root@localhost cron]# cat root
2 * * * * echo "hello"

使用者权限文件:

/etc/cron.allow
  • 这个文件用于明确允许哪些用户可以使用 crontab
  • 如果该文件存在,那么只有其中列出的用户才被允许使用 crontab。未列出的用户将被禁止。
  • 文件中每一行包含一个用户名。例如,如果 /etc/cron.allow 包含:
    root 
    alice
    这意味着只有 rootalice 被允许使用 crontab
/etc/cron.deny
  • 这个文件用于明确禁止哪些用户使用 crontab
  • 如果 /etc/cron.allow 不存在,那么系统将查看 /etc/cron.deny。所有不在此文件中的用户都可以使用 crontab
  • 文件中每一行包含一个用户名。例如,如果 /etc/cron.deny 包含:
    bob 
    charlie
    这意味着 bobcharlie 被禁止使用 crontab,而其他用户都可以使用。
使用规则 
  • 如果存在 /etc/cron.allow,则只有其中列出的用户可以使用 crontab/etc/cron.deny 将被忽略。
  • 如果 /etc/cron.allow 不存在,但存在 /etc/cron.deny,则所有不在 /etc/cron.deny 中的用户都可以使用 crontab
  • 如果这两个文件都不存在,则所有用户都可以使用 crontab(通常只受系统权限的限制)。

crontab 参数

crontab 命令有几个常用选项:

  • crontab -e:编辑当前用户的crontab文件。
  • crontab -l:列出当前用户的crontab任务。
  • crontab -r:删除当前用户的crontab任务。
  • crontab -u USERNAME:操作指定用户的crontab(需要管理员权限)。
编辑crontab文件
要编辑当前用户的crontab文件,使用以下命令:
crontab -e编辑指定用户的crontab:-u选项通常用于指定特定用户,而后续应该带上其他操作参数或文件名。
crontab -u lzz -e查看crontab任务
要查看当前用户的crontab任务,可以使用:
crontab -l删除当前用户的crontab
如果您想删除当前用户的整个crontab文件,可以使用以下命令:
crontab -r
这个命令会删除当前用户的所有定时任务,并且没有确认提示。因此,使用此命令时要小心,因为删除后将无法恢复。删除其他用户的crontab
如果是系统管理员并想删除其他用户的crontab,可以指定用户名。请确保有适当的权限。以下命令删除指定用户的crontab:
crontab -u 用户名 -r删除crontab中的特定任务
要删除crontab中的特定任务,最佳方法是编辑crontab文件并移除相应的行。建议在删除任务前备份crontab文件。如果需要备份当前用户的crontab,可以使用以下命令导出到文件:
crontab -l > crontab_backup.txt
这样,即使意外删除了任务,您也可以通过导入备份来恢复:
crontab crontab_backup.txt

crontab 文件格式

crontab文件的每一行代表一个任务,格式如下:

分钟 小时 日 月 星期 命令
  • 分钟:0到59
  • 小时:0到23
  • :1到31
  • :1到12
  • 星期:0到7(0和7都表示星期天)

此外,还有一些特殊的符号和用法:

  • *:匹配任何值。
  • ,:指定多个值,例如1,15表示第1和第15分钟。
  • -:指定范围,例如1-5表示从1到5。
  • /:指定步长,例如*/5表示每5分钟。

每天早上8点执行任务
0 8 * * * /path/to/your/script.sh
这将在每天早上8点执行指定的脚本。每周一上午9点执行任务
0 9 * * 1 /path/to/weekly/script.sh
这将在每周一上午9点运行。每5分钟执行一次任务
*/5 * * * * /path/to/frequent/task.sh
这将在每5分钟执行一次任务。每个月1号中午12点执行任务
0 12 1 * * /path/to/monthly/task.sh
这将在每月的1号中午12点执行。特定日期的特定时间执行任务
0 14 15 7 * /path/to/specific/task.sh

想验证自己设定的结果,可以用一些在线工具查看crontab的结果,这里附上三个地址

crontab执行时间计算 - 在线工具 

在线crontab表达式执行时间计算工具_蛙蛙工具 

Cron - 在线Cron表达式生成器 

 

特殊用法

  • 使用@语法:可以使用特殊的字符串表示常见的时间配置。
    • @reboot:在系统启动时运行。
    • @yearly@annually:每年执行一次。
    • @monthly:每月执行一次。
    • @weekly:每周执行一次。
    • @daily@midnight:每天执行一次。
    • @hourly:每小时执行一次。
以下是系统启动时运行的示例:
@reboot /path/to/startup/task.sh

使用技巧与思路扩展: 

要在每月的最后一天执行特定命令,最常见的方式是使用crontab中的定时任务。由于每个月的天数不固定,直接用crontab无法简单地指定每月的最后一天。需要使用一种技巧来实现这一目标。 

可以在crontab中设置一个每天运行的任务,然后用脚本判断是否是当月的最后一天。如果是,则执行特定命令。

步骤
  1. 设置定时任务:在crontab中设置一个每天在固定时间执行的任务。
  2. 判断是否是最后一天:在任务中编写逻辑,判断当天是否是当月的最后一天。
  3. 执行特定命令:如果是最后一天,则执行特定命令。
示例

以下是一个示例,说明如何在每月的最后一天执行特定命令。在这个例子中,每天晚上11:59运行一个脚本,然后检查是否是当月的最后一天。

  1. 编辑crontab: 使用crontab -e来编辑crontab文件。

  2. 设置定时任务: 在crontab中添加以下行,每天晚上11:59执行一个检查脚本:

    59 23 * * * /path/to/check_last_day.sh
    #当然这个时间点可以设置成任意的时间点去判断,只要这个时间点不影响你执行时间即可
  3. 编写检查脚本: 创建一个脚本/path/to/check_last_day.sh,用来判断当天是否是当月的最后一天。如果是,则执行特定命令。

    #!/bin/bash# 获取明天的日期
    tomorrow=$(date -d "tomorrow" +%d)# 如果明天的日期是1,表示今天是当月的最后一天
    if [ "$tomorrow" -eq 1 ]; then# 如果是最后一天,执行特定命令/path/to/your/command.sh
    fi
    
  4. 添加执行权限: 确保脚本有执行权限:

    chmod +x /path/to/check_last_day.sh

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

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

相关文章

PyQt5的布局管理

文章目录 1.垂直布局和水平布局垂直布局&#xff08;QVBoxLayout&#xff09;&#xff1a;水平布局&#xff08;QHBoxLayout&#xff09;&#xff1a; 2. 布局中的addStrech2.1 我们首先看只有一个Strech的情况&#xff0c;比较容易理解2.2 两个Strech2.3 多个Strech 3.栅格布局…

FPGA HDMI Sensor无线航模摄像头

FPGA方案&#xff0c;接收摄像头sensor 图像数据后&#xff0c;通过HDMI输出到后端 客户应用&#xff1a;无线航模摄像头 主要特性&#xff1a; 1.支持2K以下任意分辨率格式 2.支持多种型号sensor 3.支持自适应摄像头配置&#xff0c;并补齐输出时序 4.可定制功能&#xff…

OpenHarmony 实战开发(南向)-Docker编译环境搭建

Docker环境介绍 OpenHarmony为开发者提供了两种Docker环境&#xff0c;以帮助开发者快速完成复杂的开发环境准备工作。两种Docker环境及适用场景如下&#xff1a; 独立Docker环境&#xff1a;适用于直接基于Ubuntu、Windows操作系统平台进行版本编译的场景。 基于HPM的Docker…

【ArcGIS Pro微课1000例】0058:玩转NetCDF多维数据集

一、NetCDF介绍 NetCDF(network Common Data Form)网络通用数据格式是由美国大学大气研究协会(University Corporation for Atmospheric Research,UCAR)的Unidata项目科学家针对科学数据的特点开发的,是一种面向数组型并适于网络共享的数据的描述和编码标准。NetCDF广泛应…

【外币兑换,简单贪心】

小明刚从美国回来&#xff0c;发现手上还有一些未用完的美金&#xff0c;于是想去银行兑换成人民币。可是听说最近人民币将会升值&#xff0c;并从金融机构得到了接下来十二个月可能的美元对人民币汇率&#xff0c;现在&#xff0c;小明想要在接下来一年中把美金都兑换成人民币…

【Java】Java中栈溢出的常见情况及解决方法

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

Linux实验二:文件IO操作

目录 一、实验目的二、实验内容三、实验环境四、参考代码五、实验步骤步骤1. 编辑程序源代码test2.c步骤2. 编译源代码test2.c步骤3. 编辑源文件alice.txt步骤4. 运行程序test2 六、实验结果七、实验总结 一、实验目的 1、掌握Linux中系统调用、文件描述符的基本概念&#xff…

docker-compose管理jenkins

1.安装docker和compose 1.docker 更新系统&#xff1a;yum update 安装依赖项&#xff1a;yum install -y yum-utils device-mapper-persistent-data lvm2 配置镜像源&#xff1a;yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce…

5.12母亲节营销攻略:TikTok助力出海品牌赢得用户心

母亲节&#xff0c;作为一个全球性的节日&#xff0c;不仅是表达对母亲的感激之情的时刻&#xff0c;也是品牌们展示创意、赢得用户心的黄金机会。2024母亲节将至&#xff0c;如何利用TikTok在母亲节这一特殊时刻进行营销&#xff0c;赢得用户的心&#xff0c;成为出海品牌必须…

AWS-TGW同区域多vpc打通

同区域vpc打通方案配置 跨区域参考另一个博客 点我跳转 vpc110.30.0.0/16实例110.30.4.178 vpc2172.31.0.0/16实例2172.31.43.180 1. 新建tgw 默认配置即可 2.创建挂载&#xff0c;两个vpc打通就需要创建2个挂载 3. 观察tgw的路由规则 等待挂载完全创建完成后&#xff0c;会…

校友录系统的设计与开发

**中文摘要&#xff1a;**随着互联网技术的不断发展和普及&#xff0c;人们对于信息化、数字化的需求也越来越高。在此背景下&#xff0c;校友录系统的设计与开发显得尤为重要。本文旨在设计和开发一款方便实用的校友录系统&#xff0c;为学校提供一个联系和管理校友的平台&…

超分辨率专题 | 3 种方法、4 个教程、10 个数据集,一文 Get 核心知识点

2010 年 12 月&#xff0c;清华大学电子工程系教授苏光大接到一通不寻常的电话&#xff0c;内蒙古自治区准格尔刑警队的警员拿着一张模糊不清的犯罪嫌疑人人脸图像&#xff0c;向苏光大寻求帮助。 「这张图像是由路边的监控摄像头拍摄的&#xff0c;像素非常低&#xff0c;肉眼…

2024数维杯C题24页完整解题思路+1-4问代码解题+运行高清结果图

C题天然水合物资源量评价 点击链接加入群聊【2024数维杯数学建模ABC题资料汇总】&#xff1a; 2024数维杯C题完整思路24页配套代码1-4问后续参考论文https://www.jdmm.cc/file/2710638 下面内容是持续更新的 根据勘探数据确定天然气水合物资源的分布范围。 假设勘探区域内的…

Mura CMS processAsyncObject SQL注入漏洞复现(CVE-2024-32640)

0x01 产品简介 Mura CMS(Content Management System)是一款用于创建和管理网站内容的开源内容管理系统。它具有许多功能和灵活性,使其成为许多网站开发者和内容创作者的首选工具。是一个强大的企业网站解决方案,可用于创建和管理公司网站、产品目录、新闻发布、客户支持和…

异步时序电路的分析方法

异步时序电路的分析方法 在异步时序电路中&#xff0c;只有部分触发器由时钟脉冲 CP触发&#xff0c;其它触发器由电路内部信号触发。分析异步时序电路时需写出时钟方程&#xff0c;并特别注意各触发器的时钟条件在何时满足&#xff0c;其状态方程才能使用 Tips&#xff1a;在…

Sass语法介绍-变量介绍

02 【Sass语法介绍-变量】 sass有两种语法格式Sass(早期的缩进格式&#xff1a;Indented Sass)和SCSS(Sassy CSS) 目前最常用的是SCSS&#xff0c;任何css文件将后缀改为scss&#xff0c;都可以直接使用Sassy CSS语法编写。 所有有效的 CSS 也同样都是有效的 SCSS。 Sass语…

window golang 升级版本

执行go tidy&#xff0c;发现执行不了&#xff0c;得升级一下版本了 进入官网&#xff0c;并选择合适的系统以及版本。https://go.dev/dl/ 这台电脑是windows&#xff0c;我本人比较喜欢下载zip自己解压。 解压&#xff0c;这里我选择直接覆盖原文件&#xff0c;需要保留原版…

前端技术交流群

欢迎来到前端筱园用户交流&#xff01;这是一个专注于前端编程技术、学习资源和行业动态的讨论平台。在这里&#xff0c;你可以分享经验、提问、回答问题&#xff0c;与其他前端开发者一起学习和成长。 &#x1f31f;亲爱的朋友们&#x1f31f; 大家好&#xff01;感谢你们一直…

TCP的特性(4)

TCP特性 拥塞控制(可靠性机制)延迟应答(效率机制)捎带应答(效率机制)面向字节流(粘包问题)TCP异常机制(心跳包)小结 拥塞控制(可靠性机制) 虽然TCP引入了滑动窗口,能够高效可靠的传输大量数据,但是在开始阶段就发送大量数据,可能引起一系列问题. TCP引入了慢启动机制,先发少量的…

深入浅出微前端架构

微前端&#xff08;Micro-frontends&#xff09;是一种设计思想&#xff0c;旨在将大型前端应用分解成小的、独立的、可复用的部分&#xff0c;每个部分都有自己独立的责任域。这种架构模式借鉴了微服务的理念&#xff0c;将其应用于前端开发&#xff0c;使得不同的团队可以独立…