2.Linux的例行性工 作(计划任务)

news2024/11/17 15:47:59

目录

1. 场景:

2. 单一执行的例行性任务--at(一次性)

2.1. 安装

2.2. at命令详解

2.2.1. 格式

2.2.2. 参数

2.2.3. 时间格式

2.2.4. 实验1

2.2.5. 实验2

2.2.6. 注意

2.2.7. at命令执行过程分析

2.2.8. 实验3

3. 循环执行的例行性任务-- crontab(周期性)

3.1. crontd服务

3.2. crontab工作过程

3.3. crontab命令详解

3.3.1. 格式

3.3.2. 参数

3.3.3. 编辑crontab

3.3.4. 特殊字符

3.3.5. 例

3.3.6. 实验4

3.3.7. 实验5

3.3.8. 实验6

3.3.9. 书写定时任务的注意事项

3.4. 系统级别的计划任务


1. 场景:

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

2. 单一执行的例行性任务--at(一次性)

2.1. 安装

at命令需要安装

[root@server ~]# yum install at -y 
[root@server ~]# at -V # 大写V 
at version 3.2.2 

启动服务

[root@server ~]# systemctl start atd 
[root@server ~]# systemctl enable --now atd # 设置开机启动 
[root@server ~]# systemctl status atd # 查看状态 

2.2. at命令详解

2.2.1. 格式
at  - 参数 日期时间

2.2.2. 参数

-m:当任务完成后,即使没有标准输出,也会给用户发送邮件

-l:列出系统上所有用户的at任务,等价于atq

-d:删除或取消一个任务

-v:使用时间格式,列出at任务

-c:可以列出任务之后的命令内容

-f:从文件中读取

2.2.3. 时间格式

2.2.4. 实验1

延迟执行ls /root ,并将结果写入到at.txt中

[root@server fox]# at 14:20
warning: commands will be executed using /bin/sh
at Mon Jan 22 14:20:00 2024
at> ls /root >at.txt                                                     
at> <EOT>
job 1 at Mon Jan 22 14:20:00 2024

注意:删除的时候是按住ctrl+back,结束交互界面是ctrl+d

2.2.5. 实验2

不使用交互性命令实现,通过管道符命令执行

[root@server fox]# echo "echo 'hello again' >> at.txt" | at now +1 minute

2.2.6. 注意

1.at命令只要指定的时间正确,就可以执行对应的命令

2.at命令的输出结果不会显示到屏幕上

3.at命令中执行的命令最好使用绝对路径,不容易报错

4.过程:输入at 时间 -> 回车 ->输入执行的命令->ctrl+d退出at

5.at命令只会执行一次

2.2.7. at命令执行过程分析

第一步:寻找/etc/at.allow (白名单)是否存在,写在该 文件中用户才可执行at命令

第二步:若/etc/at.allow不存在,则寻找/etc/at.deny(黑名单)文件,写在该文件中的用户不能使用at命令

第三步:若两个文件都不存在则只有root用户可以使用at命令

注意:若拒绝某用户使用at命令则可以将用户名写入到/etc/at.deny中

涉及到账号的三个文件

/etc/passwd

/etc/group

/etc/ shadow

2.2.8. 实验3

设置某账户at命令不可用

[root@server fox]# useradd cel
[root@server fox]# passwd cel
更改用户 cel 的密码 。
新的密码:                     #123
无效的密码: 密码少于 8 个字符
重新输入新的密码:              #123
passwd:所有的身份验证令牌已经成功更新。
[root@server fox]# tail -1 /etc/passwd  # 倒叙查看账户管理文件
cel:x:1001:1001::/home/cel:/bin/bash
[root@server fox]# vim /etc/at.deny

[cel@server fox]$ su root
密码: 
su: 拒绝权限
# 安全考虑,openEuler做了用户权限切换限制,解决方法
如下:
# 重新开启一个ssh连接,以root账户登录
[root@server fox]# vim /etc/pam.d/su #注释掉这行auth required pam_wheel.souse_uid

注释该行

# 保存关闭后,切换到原ssh连接
[cel@server fox]$ su root
密码: 


Welcome to 5.10.0-182.0.0.95.oe2203sp3.x86_64

System information as of time: 	2024年 01月 22日 星期一 14:55:11 CST

System load: 	0.00
Processes: 	159
Memory used: 	4.7%
Swap used: 	0%
Usage On: 	7%
IP address: 	192.168.223.129
Users online: 	3
[root@server fox]# 

总结:

[root@server ~]# useradd ce1 # 新建账户
[root@server ~]# passwd ce1 # 设置密码
更改用户 ce1 的密码 。
新的密码: # 654321
无效的密码: 密码少于 8 个字符
重新输入新的密码: # 654321
passwd:所有的身份验证令牌已经成功更新。
[root@server ~]# tail -1 /etc/passwd # 倒
叙查看账户管理文件
ce1:x:1001:1001::/home/ce1:/bin/bash
[root@server ~]# vim /etc/at.deny # 设置黑
名单
ce1 # 输入
[root@server ~]# su ce1 # 切换账
户
[ce1@server root]$ cd ~
[ce1@server ~]$ at 14:36 # 测试,at
命令不可用
You do not have permission to use at.
[ce1@server ~]$ su root # 切换到root
账户
密码:
su: 拒绝权限
# 安全考虑,openEuler做了用户权限切换限制,解决方法
如下:
# 重新开启一个ssh连接,以root账户登录
[root@server ~]# vim /etc/pam.d/su #
PAM(Pluggable Authentication Modules)负责系
统中很多应用程序的登录认证,安全设置问题 
# 注释掉第21行:
# auth required pam_wheel.so
use_uid

# 保存关闭后,切换到原ssh连接
[ce1@server ~]$ su root
密码:
Welcome to 5.10.0-153.12.0.92.oe2203sp2.x86_64
System information as of time: 2023年 11月15日 星期三 13:38:45 CST
System load: 0.00
Processes: 139
Memory used: 9.8%
Swap used: 0%
Usage On: 7%
IP address: 192.168.48.130
Users online: 2
[root@server ce1]# cd ~
[root@server ~]#

3. 循环执行的例行性任务-- crontab(周期性)

3.1. crontd服务

1.at 命令是在指定的时间只能执行一次任务, crontab 命令

可以循环重复的执行定时任务,与Windows 中的计划任务

有些类似

2.crond 是 Linux 下用来周期地执行某种任务或等待处理某

些事件的一个守护进程,在安装完成操作系统后,默认会

安装 crond 服务工具,且 crond 服务默认就是自启动

的,若需要安装则执行如下命令:

[root@server ~]# yum install crontabs   #安装,注意包名 
[root@server ~]# systemctl status crond  #查看状态

3.crond 进程每分钟会定期检查是否有要执行的任务,如果有,则会自动执行该任务,crontab 命令需要 crond 服务支持

4.linux 任务调度的工作主要分为以下两类:

(1)系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存

(2)个人执行的工作:某个用户定期要做的工作,例如每隔10 分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置

3.2. crontab工作过程

1.当系统中有 /etc/cron.allow 文件时,只有写入此文件的用户可以使用 crontab 命令,没有写入的用户不能使用 crontab 命令。同样,如果有此文件,/etc/cron.deny 文件会被忽略,因为 /etc/cron.allow 文件的优先级更高

2.当系统中只有 /etc/cron.deny 文件时,写入此文件的用户不能使用 crontab 命令,没有写入文件的用户可以使用 crontab 命令

3.crontab 执行的每一项工作都会被 记录到 /var/log/cron这个日志文件中

4.当用户使用 crontab 新建工作之后,该项工作就会被记录到/var/spool/cron/目录里面

3.3. crontab命令详解

3.3.1. 格式
crontab [-u user] [-l| -r | -e]
3.3.2. 参数

3.3.3. 编辑crontab

格式:

[root@server fox]# crontab -e

写入的命令格式:每一行书写一个工作,每个工作共有6 个字段

*/5 6-8 * 8 1 /bin/bash /test.sh

8月的每个星期一的6-8点每隔5分钟执行脚本/bin/bash /test.sh

3.3.4. 特殊字符

* * * * * *表示每隔一分钟更新

3.3.5. 例

3.3.6. 实验4

编写脚本test1.sh

[root@server fox]# vim test1.sh

#!/bin/bash
while :
do
    echo "this is my test sh"$(date) >>  /root/cro.txt
    sleep 1
done

设置循环周期性任务

[root@server fox]# crontab -e
* * * * * /bin/bash   /root/test1.sh

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

查看任务:

[root@server fox]# crontab -l
* * * * * sh /root/test.sh

删除任务

[root@server fox]# crontab -r # 删除
[root@server fox]# crontab -l # 查看列表
no crontab for root

此实验还需终止循环进程

[root@server fox]# ps -aux | grep test1
[root@server fox]# kill 进程号
3.3.7. 实验5

让系统在每周1凌晨6点重启一次

[root@server fox]# crontab -e
0 6 * * 1 /sbin/shutdown -r now
3.3.8. 实验6

设置邮件发送告警功能,每1分钟发送一封邮件

qq邮箱设置:

开启pop3/SMTP 服务:

复制授权码:

安装邮件服务:

[root@server ~]# yum install mailx -y

配置邮件服务

[root@server ~]# vim /etc/mail.rc
# 最后一行添加以下内容:
set from=2282475145@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=2282475145@qq.com
set smtp-auth-password=vjqqdgexmpvddiei  #授权码
set smtp-auth=login
# 注意:该文件输入完毕有的系统需要强制保存退出,输入wq!

测试邮件服务

[root@server ~]# echo "testmail" | mail - s "testmail" 2282475145@qq.com

设置定时任务

[root@server ~]# crontab -e
MAILTO=2282475145@qq.com
* * * * * echo "警告,SERVER服务器内存较低,速处理" | mail -v -s "告警邮件" 2282475145@qq.com

删除任务

[root@server ~]# crontab -r
[root@server ~]# crontab -l #查看

3.3.9. 书写定时任务的注意事项

1.6 个字段都不能为空,如果不确定则使用*表示任意时间

2.crontab命令任务的最小时间单位为分钟,最大有效时间为月,如:2024年某时执行、3点30分30秒这样的时间日期无法被识别

3.定义时间时,日期和星期最好不要一起出现,由于都是以天为单位,非常让管理员混淆

4.在定时任务中不能,不管是写命令还是在脚本中写命令,最好都用绝对路径,相对路径有时会报错

3.4. 系统级别的计划任务

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 : 表示执行任务的信息通过邮件发送给谁

user-name : 表示执行命令的用户是谁

例1:编写脚本testcrontab.sh,将时间写入/t1.txt文件中,每周二11点循环执行

[root@server ~]# vim testcrontab.sh
#!/bin/bash
date >> /t1.txt
[root@server ~]# vim /etc/crontab
0 11 0 0 2 root  /bin/bash   /root/testcrontab.sh

例2:每天6:00点将日志/var/log/messages 文件备份 到/backup目录中,备份后的日志文件名修改为 logfileYYYY-MM-DD-HH:MM:SS

[root@server ~]# mkdir /backup # 新建目录
[root@server ~]# vim /etc/crontab # 编辑系统
计划任务
0 6 * * * root /bin/cp   /var/log/messages   /backup/logfile`date +\%Y-\%m-\%d-\%H:\%M:\%S`
# 注意:可以使用* * * * * 进行测试
# 反引号`` 表示将引起的内容识别为命令
# 在crontab系统中%表示换行,需要增加转义符\

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

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

相关文章

Elasticsearch:聊天机器人、人工智能和人力资源:电信公司和企业组织的成功组合

作者&#xff1a;来自 Elastic Jrgen Obermann, Piotr Kobziakowski 让我们来谈谈大型企业人力资源领域中一些很酷且改变游戏规则的东西&#xff1a;生成式 AI 和 Elastic Stack 的绝佳组合。 现在&#xff0c;想象一下大型电信公司的典型人力资源部门 — 他们正在处理一百万件…

mac/macos上编译electron源码

官方教程&#xff1a;Build Instructions | Electron 准备工作这里不写了&#xff0c;参考官方文档&#xff0c;还有上一篇windows编译electron electron源码下载及编译-CSDN博客 差不多步骤&#xff0c;直接来 网络记得使用魔法 下载编译步骤 0. 选择目录很重要&#xff0…

Emergent Abilities of Large Language Models 机翻mark

摘要 证明通过扩大语言模型可以可靠地提高性能和样本效率在广泛的下游任务。相反&#xff0c;本文讨论了我们称之为大型语言模型的新兴能力的一种不可预测的现象。我们认为如果一个能力不存在于较小的模型中&#xff0c;但在较大的模型中存在&#xff0c;则该能力就是新兴的。…

InforSuiteAS中创中间件windows环境部署

版本&#xff1a;InforSuiteAS_StE_V10.0.5.2.1 环境要求&#xff1a;Java环境 DK1.8版本&#xff0c; 内存2GB或以上 &#xff0c; 硬盘空间 10GB或以上&#xff0c; 监视器 图形界面安装需要256色以上&#xff0c;字符界面安装没有色彩要求 &#xff0c;浏览器 Microsoft …

el-tree基础的树形节点设置节点不能选中高亮出来,对已经选中的节点设置disabled,对当前节点刚选中后设置禁用disabled

一、 el-tree基础的树形节点设置节点不能选中高亮出来 需求 我们使用element-ui或者element-plus的时候会遇到树形控件的使用&#xff0c;我们使用树形控件会限制有的节点不让选中和高亮出来&#xff0c;这个时候需要我们做限制。在实现中我们发现了element-ui和element-plus…

SQL注入实战:绕过操作

一&#xff1a;绕过操作 1、常用绕过方式 大小写绕过&#xff1a; 通过修改关键字内字母大小写来绕过过滤措施。例如:AnD11Select* from ** oRdEr by 1 双写绕过&#xff1a; 使用双写绕过。因为在过滤过程中只进行了一次替换。就是将关键字替换为对应的空。 比如 union在…

使用Opencv-python库读取图像、本地视频和摄像头实时数据

使用Opencv-python库读取图像、本地视频和摄像头实时数据 Python中使用OpenCV读取图像、本地视频和摄像头数据很简单&#xff0c; 首先需要安装Python&#xff0c;然后安装Opencv-python库 pip install opencv-python然后在PyCharm或者VScode等IDE中输入对应的Python代码 一…

VS执行程序的时候运行上一次的程序。

这个问题我找了很久&#xff0c;最后自己随便按一下&#xff0c;成功了&#xff0c;分享给大家&#xff1a; 上面的代码是我测试的时候用的&#xff0c;随便写个c或者c代码就行&#xff0c;因为这个时候&#xff0c;我的代码已经更改了&#xff0c;它依然执行上一次的程序。我…

2024.1.27每日一题

LeetCode 最大合金数 2861. 最大合金数 - 力扣&#xff08;LeetCode&#xff09; 题目描述 假设你是一家合金制造公司的老板&#xff0c;你的公司使用多种金属来制造合金。现在共有 n 种不同类型的金属可以使用&#xff0c;并且你可以使用 k 台机器来制造合金。每台机器都需…

【项目日记(五)】第二层: 中心缓存的具体实现(上)

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:项目日记-高并发内存池⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你做项目   &#x1f51d;&#x1f51d; 开发环境: Visual Studio 2022 项目日…

sqli-lbs靶场搭建

目录 环境小皮源码下载 1.源码解压&#xff1a; 2.搭建网站 2.1点击创建网站 2.2修改sql-connections\db-creds.inc 2.3重新启动 3.访问你设置的域名 3.1点击启动数据库配置 3.2返回第一个页面&#xff08;开启题目&#xff09; sqlilbs靶场搭建 环境小皮源码下载 下载地址&am…

AWTK 开源串口屏开发(8) - 系统设置

AWTK 开源串口屏开发 - 系统设置 系统设置只是一个普通应用程序&#xff0c;不过它会用 默认模型 中一些内置的属性和命令&#xff0c;所以这里专门来介绍一下。 1. 功能 在这个例子会用到 默认模型 中一些下列内置的属性和命令&#xff1a; 内置属性 属性类型说明rtc_yea…

x-cmd pkg | httpx - 为 Python 设计的下一代 HTTP 客户端库

目录 简介首次用户功能特点进一步探索 简介 HTTPX 是一个为 Python 设计的下一代 HTTP 客户端库&#xff0c;由 Tom Christie 创建。它提供了同步和异步的 API&#xff0c;并支持 HTTP/1.1 和 HTTP/2 协议。与 Requests 库类似&#xff0c;但增加了对异步请求的支持和 HTTP/2 …

8通液体水位检测IC/液位检测芯片/抗干扰水位检测VK36W8I SOP16/QFN16L FAE支持

产品型号&#xff1a;VK36W8I 产品品牌&#xff1a;永嘉微电/VINKA 封装形式&#xff1a;SOP16/QFN16L 工程服务&#xff0c;技术支持&#xff01; 概述 VK36W8I具有8个触摸检测通道&#xff0c;可用来检测8个点的水位。该芯片具有较高的集成度&#xff0c;仅需极少的外部组…

【汇总】解决Spring-Web与Spring-WebFlux冲突

【汇总】解决Spring-Web与Spring-WebFlux冲突 问题发现问题解决问题一&#xff1a;The bean requestMappingHandlerMapping, defined in class path resource [org/springframework/web/reactive/config/DelegatingWebFluxConfiguration.class],问题二&#xff1a;The Java/XML…

Cesium渲染白膜数据

async DrawBaiMoFun2() {// tiles 矩阵变换let changePostion = (tileSet, tx, ty, tz, rx, ry, rz, scale, center) => {if (!center) return;const m = Cesium.Transforms.eastNorthUpToFixedFrame(center);const surface =center ||Cesium.Cartesian3.fromRadians(cartog…

.NET中的matplotlib平替,ScottPlot简单使用

文章目录 前言解决方案Python调用.NET 原生解决 ScottPlot找到文章ScottPlot Nuget安装简单代码测试代码跑不了5.0新版本测试 总结 前言 我之前在学OpenCV 三语言开发的时候&#xff0c;遇到了一个问题&#xff0c;怎么可视化的显示数据。Python有matplotlib&#xff0c;那么C…

el-table每一行的回调方法及假删除真隐藏

html数据 <template><el-table :data"tableData" :row-class-name"rowClassName">//每一行的回调方法<el-table-column fixed prop"date" label"日期" width"150"></el-table-column><el-table…

Unknown encoder ‘libmp3lame

环境&#xff1a; macos m1 &#xff0c; python3.10.x 背景 做视频切片&#xff0c; 使用moviepy 中VideoFileClip进行截取视频。 报错&#xff1a; Unknown encoder libmp3lameThe audio export failed because FFMPEG didnt find the specified codec for audio encoding …

ArXiv| Graph-Toolformer: 基于ChatGPT增强提示以赋予大语言模型图数据推理能力

ArXiv| Graph-Toolformer: 基于ChatGPT增强提示以赋予大语言模型图数据推理能力. 来自加利福利亚大学戴维斯分校计算机科学系的IFM实验室发表在arXiv上的文章:“Graph-ToolFormer: To Empower LLMs with Graph Reasoning Ability via Prompt Augmented by ChatGPT”。 文章的…