【Linux】定时运行shell脚本

1、at命令

at命令允许指定Linux系统何时运行脚本,它会将作业提交到队列中,指定shell在什么时候运行该作业。

at 的守护进程 atd 在后台运行,在作业队列中检查待运行的作业。

at 守护进程会检查系统的一个特殊目录(一般位于/var/spool/at/var/spool/cron/atjobs),并从中获取at命令提交的作业。默认情况下,atd守护进程会每隔60秒检查一次此目录,如果目录下有作业,atd守护进程就会查看此作业的运行时间,若时间跟当前时间一致,就运行此作业。

格式:

at [-f filename] time

默认情况下,at命令会将STDIN的输入放入队列。可以用-f选项指定用于从中读取命令的文件名。

time选项指定用户希望运行该作业的时间。如果用户指定的时间已经过去,那么at命令会在第二天的同一时刻运行该作业。

at 命令能识别多种时间格式:

  • 标准的小时和分钟:11:25
  • AM/PM指示符:4:18 PM
  • 特定的时间名称:now、noon、midnight、teatime(4:00 p,m.)
  • 标准日期:MMDDYY、MM/DD/YY、DD.MM.YY
  • 文本日期:Feb 7、Sept 15;可加可不加年份
  • 时间增量:Now+25minutes、4:30 PM tomorrow、4:13 + 5 days

 使用at命令后,作业就会被提交至作业队列。作业队列保存着通过 at 命令提交的待处理作业。针对不同优先级,共有52种作业队列。作业队列通常用小写字母a~z和大写字母A~Z来指代。

作业队列的字母排序越高,此队列中的作业运行优先级就越低(谦让度更大)。默认情况下,at 命令提交的作业会被放入a队列。如果想降低优先级,可以使用 -q 选项指定其他的队列,比如如果想少占用cpu时间,可以将其放入z队列。

获取作业的输出

默认情况下,Linux系统会将提交该作业的用户email作为STDOUT和STDERR,即通过邮件系统传给该用户。

但这种输出很不方便,尤其是未安装sendmail的情况下。故而可以在脚本中对STDOUT和STDERR进行重定向。

#!/bin/bash

outfile=$HOME/outfile.out

echo "此脚本会在$(date +%B%d,%T)运行" > outfile
echo >> outfile
echo "此脚本使用的是$SHELL shell." >> outfile
echo >> outfile
sleep 4
echo "脚本运行结束" >> outfile
exit

-M选项,禁止作业产生的输出信息。 

查询等待中的作业

 atq 命令可以查询系统中有哪些作业在等待。

如下所示,atq命令列出了作业号,系统运行该作业的日期和时间,该作业所在的作业队列及用户账户名

删除作业

 atrm 命令用于删除等待中的作业,通过指定作业号即可。只能删除自己的作业,不能删除其他人的作业(root用户除外)

2、cron程序

 Linux系统使用cron程序调度需要定期执行的作业。cron在后台运行,并且会检查一个特殊的表,即cron时间表,从中获取已安排执行的作业。

格式:

minutepasthour hourofday dayofmonth month dayofweek command

cron时间表允许使用特定值、取值范围(如1~7)或者通配符(星号*)来指定各个字段。

  • 20 7 * * * command:在每天的7:20执行command命令
  • 00 11 1 * * command:在每月第一天的中午11点执行命令。

设置在每月的最后一天执行:使用date命令检查明天的日期是不是某个月份的第一天(01)。

00 11 28~31 * * if [ "$(date +%d -d tomorrow)" = 01 ];then command; fi

命令列表必须指定要运行的命令或脚本的完整路径。同时可以像在命令行中那样,添加所需的任何选项和重定向符。

20 7 * * * /home/csb_user1/tesh.sh > backup.out

cron程序会以提交作业的用户身份运行该脚本,因此运行前得确认有访问该脚本以及输出文件的权限。

cron时间表

crontab -e:创建定时任务

crontab -l:列出当前用户下的全部定时任务 

cron目录

 如果定时任务对执行时间的精确性要求不高,可以使用预配置的cron脚本目录。预配置的基础目录共有4个:hourly、daily、monthly、weekly

如果脚本要每天都执行,则将脚本复制到daily目录下,cron就会每天运行它。

3、anacron程序

cron程序唯一的缺点是它假定Linux系统是7x24小时运行的。但如果某个作业在cron时间表中设置的运行时间已到,且此时Linux系统处于关闭状态,那么该作业就不会运行。当再次启动系统时,cron程序不会再去运行那些已错过的作业。

anacron程序判断出某个作业错过了设置的运行时间,它会尽快运行该作业。即使Linux系统关闭了几天,等再次启动时,原计划在关机期间运行的作业会自动运行。

但anacrom程序只处理位于cron目录的程序,比如/etc/cron.daily。它通过时间戳判断作业是否在正确的计划时间间隔内运行了。每个cron目录都有一个时间戳文件,该文件位于/var/spool/anacron

 anacron程序使用自己的时间表(/etc/anacrontab)来检查作业目录。

anacron时间表格式:

period delay identifier command

  1. period:定义了作业的运行频率(以天为最小单位)。anancron程序利用该字段检查作业的时间戳文件。
  2. delay:指定了在系统启动后,anacron程序需要等待多少分钟再开始运行错过的脚本。
  3. identifier:是一个特殊的非空字符串,如:cron.weekly。它唯一的作用是标识出现在日志消息和错误email中的作业。
  4. command:包含run-parts程序和一个cron脚本目录名。run-parts程序负责运行指定目录中的所有脚本。

 anacron不会运行位于/etc/cron.hourly目录的脚本,因为anacron并不处理执行时间需求少于一天的脚本。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3 css实现文字输出带光标显示,文字输出完毕,光标消失的效果

Vue实现过程如下&#xff1a; <template><div ><p ref"dom_element" class"typing" :class"{over_fill: record_input_over}"></p></div> </template> <script setup> import {onMounted, ref} from…

数据库高安全—角色权限:角色创建角色管理

目录 3.1 角色创建 3.2 角色管理 书接上文openGauss安全整体架构&安全认证&#xff0c;从安全整体架构与安全认证两方面&#xff0c;对高斯数据库的高安全性能进行了解读&#xff0c;本篇我们将从角色创建和角色管理两方面对高斯数据库的角色权限进行介绍。 3.1 角色创建…

【U8+】用友U8软件中,出入库流水输出excel的时候提示报表输出引擎错误。

【问题现象】 通过天联高级版客户端登录拥有U8后&#xff0c; 将出入库流水输出excel的时候&#xff0c;提示报表输出引擎错误。 进行报表输出时出现错误&#xff0c;错误信息&#xff1a;找不到“fd6eea8b-fb40-4ce4-8ab4-cddbd9462981.htm”。 如果您正试图从最近使用的文件列…

《GICv3_Software_Overview_Official_Release_B》学习笔记

1.不同版本的 GIC 架构及其主要功能如下图所示&#xff1a; 2.GICv2m&#xff08;Generic Interrupt Controller Virtualization Model&#xff09;是针对ARM架构的GIC&#xff08;通用中断控制器&#xff09;的一种扩展&#xff0c; GICv2m扩展为虚拟化环境中的中断管理提供了…

【循环神经网络】RNN介绍

在人工神经网络中&#xff0c;”浅层网络”是指具有一个输入层、一个输出层和最多一个没有循环连接的隐藏层的网络。随着层数的增加&#xff0c;网络的复杂性也在增加。更多的层或循环连接通常会增加网络的深度&#xff0c;并使其能够提供不同级别的数据表示和特征提取&#xf…

C#调用Lua

目录 xLua导入 打包工具导入 单例基类导入与AB包管理器导入 Lua解析器 文件加载与重定向 Lua解析器管理器 全局变量获取 全局函数获取 对于无参数无返回值 对于有参数有返回值 对于多返回值 对于变长参数 完整代码 List与Dictionary映射Table 类映射Table 接口映射…

麒麟操作系统服务架构保姆级教程(七)Nginx+PHP+Mysql部署服务

上边几篇文章已经交过大家二进制部署nginx和php&#xff0c;现在咱们打通nginx和php&#xff0c;mysql和php&#xff0c;开始部署服务&#xff0c;学会部署服务之后就可以开始学习负载均衡啦&#xff0c;话不多说&#xff0c;咱们直接开始~~~ 目录 一、.nginx部署 二、安装PH…

开源模型迎来颠覆性突破:DeepSeek-V3与Qwen2.5如何重塑AI格局?

不用再纠结选择哪个AI模型了&#xff01;chatTools 一站式提供o1推理模型、GPT4o、Claude和Gemini等多种选择&#xff0c;快来体验吧&#xff01; 在全球人工智能模型快速发展的浪潮中&#xff0c;开源模型正逐渐成为一股不可忽视的力量。近日&#xff0c;DeepSeek-V3和Qwen 2.…

【Java项目】基于SpringBoot的【新生宿舍管理系统】

【Java项目】基于SpringBoot的【新生宿舍管理系统】 技术简介&#xff1a;本系统使用采用B/S架构、Spring Boot框架、MYSQL数据库进行开发设计。 系统简介&#xff1a;管理员登录进入新生宿舍管理系统可以查看首页、个人中心、公告信息管理、院系管理、班级管理、学生管理、宿舍…

《learn_the_architecture_-_trustzone_for_aarch64_102418_0101_03_en》学习笔记

1.TrustZone是Arm A-profile架构中安全架构的名称。TrustZone首次在Armv6K中引入&#xff0c;Armv7-A和Armv8-A也支持。TrustZone提供两个执行环境&#xff0c;它们之间具有系统范围的硬件强制隔离。在Arm架构中&#xff0c;有两种安全状态&#xff1a;安全和非安全。在EL0、EL…

Excel | 空格分隔的行怎么导入excel?

准备工作&#xff1a;windows&#xff0c;一个记事本程序和微软的Excel软件。 打开记事本&#xff0c;选中所有内容&#xff0c;按CtrlA全选&#xff0c;然后复制(CtrlC)。 在Excel中&#xff0c;定位到你想粘贴的单元格&#xff0c;按CtrlV进行粘贴。粘贴后&#xff0c;你会在…

南京观海微电子----GH7009国宇测试盒使用

1. SPI接线 针对7009&#xff1a; 2. 国宇上位机代码准备 在主函数首尾两端加入IO2时序控制的代码、以及国语SPI有效位控制的代码&#xff08;请注意7009和其他700x使用的有效位控制不一致&#xff0c;需要用哪一款加入哪一行即可&#xff09;&#xff1a; 三、国宇SPI读的使…

Arduino Uno简介与使用方法

目录 一、Arduino Uno概述 1. 硬件特性 2. 开发环境 二、Arduino Uno的基本使用方法 1. 硬件连接 2. 软件编程 三、Arduino Uno编程基础 1. 基本语法 2. 常用函数 四、Arduino Uno应用举例 1. LED闪烁 2. 温度检测 3. 超声波测距 五、Arduino Uno的扩展与应用 1…

使用命令行管理git项目

# 初始化一个新的Git仓库 git init # 添加文件到暂存区 git add <file> # 提交暂存区的更改到仓库 git commit -m "commit message" # 查看当前仓库的状态 git status # 查看提交历史 git log # 查看文件的改动 git diff <file> # 创建一个新…

网络安全的学习与实践经验(附资料合集)

学习资源 在线学习平台&#xff1a; Hack This Site&#xff1a;提供从初学者到高级难度的挑战任务&#xff0c;适合练习各种网络安全技术。XCTF_OJ&#xff1a;由XCTF组委会开发的免费在线网络安全网站&#xff0c;提供丰富的培训材料和资源。SecurityTube&#xff1a;提供丰…

基于STM32的热带鱼缸控制系统的设计

文章目录 一、热带鱼缸控制系统1.题目要求2.思路3.电路仿真3.1 未仿真3.2 开始仿真&#xff0c;显示屏显示水温、浑浊度、光照强度等值3.3 当水温低于阈值&#xff0c;开启加热并声光报警3.4 当浑浊度高于阈值&#xff0c;开启自动换水并声光报警3.5 当光照低于阈值&#xff0c…

【DevOps】Jenkins项目发布

Jenkins项目发布 文章目录 Jenkins项目发布前言资源列表基础环境一、Jenkins发布静态网站1.1、项目介绍1.2、部署Web1.3、准备gitlab1.4、配置gitlab1.5、创建项目1.6、推送代码 二、Jenkins中创建gitlab凭据2.1、创建凭据2.2、在Jenkins中添加远程主机2.3、获取gitlab项目的UR…

SSM-SpringMVC

目录 “为什么要学 SpringMVC&#xff1f;它和 Servlet 是什么关系&#xff1f;” “什么是异步&#xff1f;为什么异步交互中常用 JSON 格式&#xff1f;异步请求和 JSON 如何配合&#xff1f;” 一、概述 SpringMVC主要负责 1 SpringMVC的常用组件 2 SpringMVC的工作流程…

基层医联体医院患者历史检验检查数据的快速Python编程分析

​​​​​​​ 一、引言 1.1 研究背景与意义 在当今数字化医疗时代,医疗数据呈爆炸式增长,涵盖患者的基本信息、病史、检验检查结果、治疗方案等各个维度。这些海量且复杂的数据蕴含着巨大价值,为精准医疗决策提供了关键依据。通过对患者历史检验检查数据的深入对比分析…

计算机网络基础(7)中科大郑铨老师笔记

应用层 目标&#xff1a;  网络应用的 原理&#xff1a;网络应用协议的概念和实现方面 传输层的服务模型 客户-服务器模式 对等模式(peerto-peer) 内容分发网络  网络应用的 实例&#xff1a;互联网流行的应用层协 议  HTTP  FTP  SMTP / POP3 / IMAP  DNS…