详解Linux例行性工作

news2025/6/19 0:31:06

例行性工作(计划任务)

场景:

  • 生活中,我们有太多场景需要使用到闹钟,比如早上7点起床,下午4点开会,晚上8点购物,等等。
  • 再Linux系统里,我们同样也有类似的需求。比如我们想在凌晨1点将文件上传到服务器,或者在晚上10点确认系统状态,等等。
  • 但是我们不可能一直守在电脑前,毕竟我们也需要下班/睡觉,还要陪女朋友。而且即使在上班期间,如果到点了还需要人工操作,未免效率太低了。
  • at命令就是为这个需求而诞生的使用at命令,你可以在特定时间自动完成你所设定的任务,也可以实现自动化,非常方便快捷。

单一执行的例行性任务—at(一次性)

安装

使用yum安装at

[root@server ~]# yum install at
  • at命令一般默认安装在系统中,通过下列命令查看版本号
[root@server ~]# at -V
at version 3.1.23
  • 查看at执行的状态
[root@server ~]# systemctl status atd  # 查看状态
[root@server ~]# systemctl enable --now atd # 设置开机自启动

at命令详解

格式

at   日期时间

实例1

[root@server ~]# at 1:09
warning: commands will be executed using /bin/sh
at> ls /root > at.txt
at> <EOT>        # 按下ctrl+d退出at输入状态
job 2 at Tue Nov 14 01:09:00 2023 # job 1为工作编号
[root@server ~]# at  -l   # 浏览计划任务列表
[root@server ~]# atq    # 浏览计划任务列表

[root@server ~]# ls     # 查看结果
公共  模板  视频  图片  文档  下载  音乐  桌面  anaconda-ks.cfg  at.txt
[root@server ~]# cat  at.txt 

参数

[root@server ~]# at -l
atq:等价于at  -l
[root@server ~]# at -c 8    # 列出任务后的命令内容(8为工作编号)
[root@server ~]# at -d 6    # 删除或取消一个任务(6为工作编号)

实例2

  • 不使用交互命令实现at任务
#从当前开始,经过1分钟后执行
[root@server ~]# echo "ls /root > at.txt" | at now +1 minutes
warning: commands will be executed using /bin/sh
job 11 at Tue Nov 14 01:45:00 2023
[root@server ~]# at -l
11      Tue Nov 14 01:45:00 2023 a root
工作编号            执行时的时间


[root@server ~]# echo "rm -fr /root/at.txt" | at now +1 minutes
warning: commands will be executed using /bin/sh
job 12 at Tue Nov 14 01:46:00 2023
时间格式
参数说明
HH:MM今天HH小时的MM分钟执行,若时间错过则在明天执行
HH:MM YYYY-MM-DD规定在某年某月某日的特殊时间执行
now +数字 时间单词now +2 minutes
now +3 hours
now +4 days
now +5 weeks
表示从当前开始,经过多长时间后执行

注意

  • at命令只要指定的时间正确,就可以执行对应的命令
  • at命令的输出结果不会显示在屏幕上
  • at命令中执行的命令最好使用绝对路径,不容易报错
  • 过程:输入at 时间—>回车—>输入执行命令—>ctrl+d退出at编辑
  • 按ctrl+Backspace删除at命令行中的错误输入
  • at命令只会执行一次

at命令执行过程分析

  • 第一步:寻找/etc/at.allow(白名单)是否存在,写在该文件中的用户才可执行at命令
  • 第二步:若/etc/at.allow不存在,则寻找/etc/at.deny(黑名单)文件,写在该文件中的用户不能使用at命令
  • 第三步:若两个文件都不存在,则只用root可以使用at命令
  • 注意:若拒绝某用户使用at命令则可以将用户名写入到/etc/at.deny中

实例3

  • 设置某些账户不可使用at命令
[root@server ~]# useradd ce1   # 新建账户
[root@server ~]# passwd ce1   # 设置账户密码
更改用户 ce1 的密码 。
新的密码:
无效的密码: 密码少于 8 个字符
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。
[root@server ~]# id ce1    # 查看账户信息
用户id=1001(ce1) 组id=1001(ce1)=1001(ce1)
[root@server ~]# vim /etc/at.deny  # 编辑黑名单
写入ce1
[root@server ~]# su ce1  # 切换账户
[ce1@server root]$ cd
[ce1@server ~]$ at 2:12
You do not have permission to use at.
[ce1@server ~]$ su root
密码:
[root@server ce1]# cd
[root@server ~]# vim /etc/at.deny
删除ce1
[root@server ~]# su -l ce1  # 切换账户(-l回到用户的家目录)
[ce1@server ~]$ at 2:14
warning: commands will be executed using /bin/sh
at> <EOT>
job 13 at Tue Nov 14 02:14:00 2023
[ce1@server ~]$ su -l root
密码:
[root@server ~]#

循环执行的例行性任务—crontab(周期性)

crond服务

  • at命令是在指定的时间只执行一次任务crontab命令可以循环重复的执行定时任务,与Windows中的计划任务有些类似
  • crond是Linux下用来周期地执行某种任务或等待处理某些事件的一个守护进程,在安装完成操作系统后,默认会安装crond服务工具,且crond服务默认就是自启动的,若需要安装则执行若下命令:
[root@server ~]# yum install crontabs
安装包名和服务包名不一样
[root@server ~]# systemctl status crond
  • crond进程每分钟会定期检查是否有要执行的任务,如果有,则会自动执行该任务,crontab命令需要crond服务支持
  • Linux任务调度的工作主要分为以下两类:
    • 系统执行的工作:系统周期性所要执行的工作,如备份系统数据,清理缓存等等
    • 个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有信息,这些工作可由每个用户自行设置

crontab工作过程

  • 当系统中有 /etc/cron.allow文件时,只有写入此文件的用户可以使用crontab命令没有写入的用户不能使用crontab命令。同样,如果有此文件,/etc/cron.deny文件会被忽略,因为/etc/cron.allow文件的优先级更高
  • 当系统中只有/etc/cron.deny文件时,写入此文件的用户不能使用crontab命令,没有写入文件的用户可以使用crontab命令
  • crontab执行的每一项工作都会被记录到/var/log/cron这个日志文件中
  • 当用户使用crontab新建工作之后,该项工作就会被记录到/var/spool/cron目录里面

crontab命令详解

格式

crontab    [-u user]   [-l | -r | -e]

参数

参数说明
-u指定用户执行该任务
-e编辑crontab工作内容
-l查询crontab任务内容
-r删除crontab任务

编辑crontab

格式

crontab  -e

注意:

  • 写入的命令一行一个命令,每行共6段:前5段为时间,最后一段为命令
  • 时间共5段,意义如下:
表示意义星期
数字范围0-590-231-311-120-7(0和7都表示星期天)
特殊字符
*     表示任意时刻
-     表示范围
,      分割时段
*/数字      指定时间间隔频率,如:每3分钟执行一次:*/3
时间描述示例
1 2 * * *      每天凌晨2点1分执行动作
0 17 * * 1    每周1下午5点整执行动作
0 5 1,15 * *    每月的1日和15日凌晨5点整执行动作
40 4 * * 1-5     每周1到周5凌晨4点40分执行动作
*/10 4 * * *       每天凌晨4点每隔10分钟执行动作
3,15 8-11 */2 * *    每隔2天上午8-11点的第3分钟和第15分钟执行动作
* * * * *      每隔1分钟执行动作

实验1

  • 编写脚本test.sh(脚本必须以.sh为文件扩展名
[root@server ~]# vim test.sh
#!/bin/bash              (指定脚本解释器)

while :
do
        echo  "this is my test sh"$(date)  >>  /root/cro.txt
        sleep 1
done
  • 设置周期性的计划任务
[root@server ~]# crontab -u redhat -e

默认当前用户

[root@server ~]# crontab  -e
*/1 * * * * /bin/bash  /root/test.sh

注意:crond服务会自动启动,crontab命令只要保存就会生效

  • 查看任务 -l
[root@server ~]# crontab  -l
*/1 * * * * /bin/bash  /root/test.sh
  • 删除任务 -r
[root@server ~]# crontab  -r    # 删除
[root@server ~]# crontab  -l    # 查看
no crontab for root
  • 此实验需要终止循环进程
[root@server ~]# ps -aux | grep test   # 查看已存在的test进程
root        3895  0.0  0.1 221680  2372 pts/0    S+   10:59   0:00 grep --color=auto test
[root@server ~]# kill  -9  进程号
[root@server ~]# kill  -9  3895   # 强制终止

实验2

  • 让系统每周1凌晨6点重启一次
[root@server ~]# crontab -e
0 6 * * 1    /sbin/shutdown -r now
[root@server ~]# crontab -l
0 6 * * 1 /sbin/shutdown -r now
  • 不想执行该任务可以删除
[root@server ~]# crontab -r
[root@server ~]# crontab -l
no crontab for root

实验3(重点)

实验内容:设置邮件发送功能:每1分钟发送1封邮件

  • 首先我们要做的就是QQ邮箱设置

1.使用浏览器打开qq邮箱,点击设置
在这里插入图片描述
2.点击账号
在这里插入图片描述
3.选择POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,然后开启服务,获得授权码
在这里插入图片描述
在这里插入图片描述

  • 安装邮件服务

注:不同发行版本的邮件服务名不一样,RHEL9的邮件服务名为s-nail

[root@server ~]# yum install s-nail -y
  • 配置邮件服务
[root@server ~]# vim /etc/s-nail.rc
set from=123456789@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=123456789@qq.com
set smtp-auth-password=abcdefghijklmnop      # 这里是16位的授权码
set smtp-auth=login

注意:文件配置完毕需要强制保存并退出,末行模式下输入wq!

  • 测试一下邮件服务
[root@server ~]# echo '内容' | mail -s '主题' 123456789@qq.com

敲完这个命令后,在你的qq邮箱就会立刻收到邮件
在这里插入图片描述

  • 测试完成,我们再来设置周期性的任务,每个1分钟发送邮件
[root@server ~]# crontab -e
MAILTO=17674044@qq.com

* * * * * echo  "警告,server服务器内存较低,请速处理."  |  mail  -s  "告警邮件"  123456789@qq.com

在这里插入图片描述

  • 实验完成之后,删除循环执行任务,不然你的qq邮箱得爆,哈哈哈
[root@server ~]# crontab -r
[root@server ~]# crontab -l
no crontab for root
书写定时任务得注意事项
  • 6个字段都不能为空,如果不确定则使用*表示任意时间
  • crontab命令任务的最小时间单位为分钟,最大有效时间为月,如:2024年某时执行、3点30分30秒这样的时间日期无法被识别
  • 定义时间时,日期和星期最好不要一起出现,由于都是以天为单位,非常让管理员混淆
  • 在定时任务中不能,不管是写命令还是在脚本中写命令,最好都用绝对路径,相对路径有时会报错

系统级别的计划任务(crontab的另一种计划任务)

crontab -e是每个用户都可以执行的命令,但是有时定时任务必须由系统执行,此时就需要编辑 /etc/crontab配置文件来实现

[root@server ~]# vim /etc/crontab
  • 仅能通过root定义,不可以使用普通账户身份去执行计划任务
  • 方法:在/etc/crontab最后一行新增计划任务即可
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

  • 分析:
    • SHELL=/bin/bash :指定系统使用哪个shell解释器去执行
    • PATH=/sbin:/bin:/usr/sbin:/usr/bin : 系统执行命令的搜索路径
    • MAILTO=root :表示执行任务的信息通过邮件发送给谁
    • MAILTO=root :表示执行命令的用户是谁
实验4

每天6:00将日志文件/var/log/messages文件进行备份,备份到/backup目录中,备份时需要将logfileYYYY-MM-DD-HH:MM:SS

[root@server ~]# mkdir  /backup

[root@server ~]# vim  /etc/crontab
0 6 * * * root  /usr/bin/cp  /var/log/messages /backup/logfile`date  +\%Y-\%m-\%d-\%H:\%M:\%S` 


# 注意
	# 反引号``:表示将引起的内容识别为命令
	# 在crontab中%表示换行,需要增加转义符\进行转义

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

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

相关文章

C语言学习--练习3(贪心)

目录 贪心算法 1. 两数对之间的最大乘积差 2.三角形的最大周长 3.数组拆分 4.救生艇 5.发送饼干 6.摆动数组 贪心算法 概念定义 所谓贪心&#xff0c;总是做出在当前看来是最好的选择。也就是说&#xff0c;不从整体最优上进行考虑&#xff0c;算法得到的是在某种…

第三百九十一回

文章目录 1. 概念介绍2. 方法与细节2.1 实现方法2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何混合选择多个图片和视频文件"相关的内容&#xff0c;本章回中将介绍如何通过相机获取视频文件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. …

【数据库-黑马笔记】基础-SQL

本文参考b站黑马数据库视频,总结详细全面的笔记 ,可结合视频观看1~26集 MYSQL 的基础知识框架如下 目录 一、MYSQL概述 1、数据库相关概念 2、MYSQL的安装及启动 二、SQL 1、DDL【Data Defination】 2、DML【Data Manipulation】 ①、插入 ②、更新和删除 3、 DQL【Data…

【Scrapy】京东商品数据可视化

【Scrapy】京东商品数据可视化 文章目录 【Scrapy】京东商品数据可视化  &#x1f449;引言&#x1f48e;一、爬取数据&#xff1a;1.1 scrapy爬虫库简介&#xff1a;1.2 技术实现&#xff1a;1.2.1搭建框架结构1.2.2 分析网页结构 二、数据保存&#xff1a;三、数据读取以及…

【Algorithms 4】算法(第4版)学习笔记 16 - 4.2 有向图

文章目录 前言参考目录学习笔记1&#xff1a;介绍1.1&#xff1a;有向图简介1.2&#xff1a;应用举例1.3&#xff1a;相关问题2&#xff1a;有向图 API2.1&#xff1a;有向图表示2.1.1&#xff1a;邻接表数组 Adjacency-list2.1.2&#xff1a;Java 实现&#xff1a;邻接表数组2…

2024年k8s最新版本安装教程

k8s安装教程 1 k8s介绍2 环境搭建2.1 主机准备2.2 主机初始化2.2.1 安装wget2.2.2 更换yum源2.2.3 常用软件安装2.2.4 关闭防火墙2.2.5 关闭selinux2.2.6 关闭 swap2.2.7 同步时间2.2.8 修改Linux内核参数2.2.9 配置ipvs功能 2.3 容器安装2.3.1 设置软件yum源2.3.2 安装docker软…

C# OpenVINO Yolov8-OBB 旋转目标检测

目录 效果 模型 项目 代码 下载 C# OpenVINO Yolov8-OBB 旋转目标检测 效果 模型 Model Properties ------------------------- date&#xff1a;2024-02-26T08:38:44.171849 description&#xff1a;Ultralytics YOLOv8s-obb model trained on runs/DOTAv1.0-ms.yaml …

论文的引用书写方法

前置操作 1、全选文献 2、在开始选项卡 段落功能区 选择编号功能 3、设置编号格式 [1] 论文的引用 1、光标放在需要引用论文的地方 2、选择引用选项卡 点击交叉引用 3、引用类型为编号项 引用内容为段落编号 选择需要的第几条参考文献

Linux第74步_“设备树”下的LED驱动

使用新字符设备驱动的一般模板&#xff0c;以及设备树&#xff0c;驱动LED。 1、添加“stm32mp1_led”节点 打开虚拟机上“VSCode”&#xff0c;点击“文件”&#xff0c;点击“打开文件夹”&#xff0c;点击“zgq”&#xff0c;点击“linux”&#xff0c;点击“atk-mp1”&am…

数据库的筛选条件

【一】筛选过滤条件 【1】完整的查询语句 -- 查询当前表中的全部数据select * from 表名 where 筛选条件;​-- 查询当前表中的指定字段的数据select 字段名,字段名 from 表名 where 筛选条件;# 执行顺序from where select ​select 你选择的列1, 你选择的列2, ... from 查询的…

UVA191 Intersection 题解

UVA191 Intersection 题解 水紫&#xff0c;建议降蓝。 解法 求线段相交裸题&#xff0c;考虑使用向量解决。 我们把矩形的 4 4 4 个点两两相连&#xff0c;得到 6 6 6 条线段&#xff0c;如果先输入的线段和这 6 6 6 条线段都没有交点&#xff0c;则认为线段和矩形不相…

高度塌陷问题及解决

什么情况下产生 (when 父盒子没有定义高度&#xff0c;但是子元素有高度&#xff0c;希望用子盒子撑起父盒子的高度&#xff0c;但是子盒子添加了浮动属性之后&#xff0c;父盒子高度为0 <template><div class"father"><div class"son"&…

基于命名实体链接的事件抽取与知识图谱在电商领域的应用

开源项目推荐 多模态AI能力引擎平台: 免费的自然语言处理、情感分析、实体识别、图像识别与分类、OCR识别、语音识别接口&#xff0c;功能强大&#xff0c;欢迎体验。 多模态AI能力引擎平台: 免费的自然语言处理、情感分析、实体识别、图像识别与分类、OCR识别、语音识别接口…

代码还原之 函数

指令堆里逆向出来的代码有歧义&#xff0c;有三处返回&#xff0c;有嵌套IF语句&#xff0c;故推断出是个函数&#xff1b; #if 0/*27ec: 48 8d 3d 58 39 00 00 lea 0x3958(%rip),%rdi # 614b <_IO_stdin_usedBase0x14b> // rdi"COLUMNS"27f3: e8 e…

Express学习(三)

Express中间件 中间件的概念 什么是中间件 中间件&#xff0c;特指业务流程的中间处理环节。Express中间件的调用流程 当一个请求到达Express的服务器之后&#xff0c;可以连续调用多个中间件&#xff0c;从而对这次请求进行预处理。类似于下图所示 Express中间件的格式 Expr…

安卓SDK dx工具生成dex文件命令

目录 前言一、添加到环境变量二、命令示例 前言 在Android SDK 工具中&#xff0c;dx命令用于将Java字节码文件转换为Dalvik Executable&#xff08;dex&#xff09;文件&#xff0c;以便在Android设备上运行。 一、添加到环境变量 找到想要使用的SDK版本&#xff0c;将dx.b…

C++11 新特性 增加数据类型

一.C11 新增加数据类型介绍 在C11中&#xff0c;新增了long long、unsigned long long、char16_t和char32_t等数据类型&#xff0c;它们可以支持更宽的整型和字符表示。 long long&#xff1a;long long是一种整数类型&#xff0c;它至少可以存储64位&#xff08;8字节&#x…

Offer必备算法12_链表_五道力扣题详解(由易到难)

目录 ①力扣2. 两数相加 解析代码 ②力扣24. 两两交换链表中的节点 解析代码 ③力扣143. 重排链表 解析代码 ④力扣23. 合并 K 个升序链表 解析代码1&#xff08;小根堆优化&#xff09; 解析代码2&#xff08;递归_归并&#xff09; ⑤力扣25. K 个一组翻转链表 解…

【从部署服务器到安装autodock vina】

注意&#xff1a;服务器 linux系统选用ubuntu 登录系统&#xff0c;如果没有图形化见面可以先安装图形化界面 可以参考该视频 --> linux安装图形化界面 非阿里云ubuntu 依次执行以下命令 sudo apt-get update sudo apt-get install gnome sudo reboot阿里云ubuntu 需多执…

Glip模型

Yolos 完全使用Transformer做目标检测 Detr 先使用CNN提取特征然后再使用transformerDetr和Yolos共同的缺点:需要事先知道所有的类别 Glip Zero-shot, 目标检测的类别可以不在训练类别中目标框进行视觉编码,然后和文本进行匹配文本和视觉特征是通过Clip模型提取的,所以视觉向…