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

2.Linux的例行性工 作(计划任务)1 当系统中有 etc cron allow 文件时 只有写入此文件的用户可以使用 crontab 命令 没有写入的用户不能使用 crontab 命令

大家好,欢迎来到IT知识分享网。

目录

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.Linux的例行性工 作(计划任务)

2.2. at命令详解

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

2.2.2. 参数

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

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

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

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

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

-f:从文件中读取

2.2.3. 时间格式

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

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

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

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

2.2.5. 实验2

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

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

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

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

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命令

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

第三步:若两个文件都不存在则只有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

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

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

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

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

注释该行

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

# 保存关闭后,切换到原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]# 

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

总结:

[root@server ~]# useradd ce1 # 新建账户 [root@server ~]# passwd ce1 # 设置密码 更改用户 ce1 的密码 。 新的密码: #  无效的密码: 密码少于 8 个字符 重新输入新的密码: #  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 #查看状态

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

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. 参数

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

3.3.3. 编辑crontab

格式:

[root@server fox]# crontab -e

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

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

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

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

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

3.3.4. 特殊字符

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

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

3.3.5. 例

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

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

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

设置循环周期性任务

[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分钟发送一封邮件

邮箱设置:

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

开启pop3/SMTP 服务:

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

复制授权码:

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

安装邮件服务:

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

配置邮件服务

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

测试邮件服务

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

设置定时任务

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

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

分析

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

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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/143988.html

(0)
上一篇 2025-04-29 19:33
下一篇 2025-04-29 19:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信