CSE day1 at命令
作用:
使用 at 命令,你可以在特定时间自动完成你所设定的任务,也可以实现自动化,非常方便快捷
课前准备
1.完整两个克隆rhel9.3-------一个server(服务器)
-------一个client(客户端)
2.获取ip地址,建立远程连接
[root@localhost ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:3c:dc:7b brd ff:ff:ff:ff:ff:ffaltname enp3s0inet 192.168.25.129/24 brd 192.168.25.255 scope global dynamic noprefixroute ens160valid_lft 1214sec preferred_lft 1214secinet6 fe80::20c:29ff:fe3c:dc7b/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@localhost ~]# ^C [root@localhost ~]# 或[root@localhost ~]# ifconfig ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.25.129 netmask 255.255.255.0 broadcast 192.168.25.255inet6 fe80::20c:29ff:fe3c:dc7b prefixlen 64 scopeid 0x20<link>ether 00:0c:29:3c:dc:7b txqueuelen 1000 (Ethernet)RX packets 31530 bytes 45273855 (43.1 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 6779 bytes 398626 (389.2 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1000 (Local Loopback)RX packets 27 bytes 2806 (2.7 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 27 bytes 2806 (2.7 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0[root@localhost ~]#
方法一

方法二

安装at
[root@localhost ~]# yum install at -y
[root@localhost ~]# at -V # 大写V(-V查看版本号)
at version 3.1.23
[root@localhost ~]#
启动服务
[root@localhost ~]# systemctl start atd
[root@localhost ~]# systemctl enable --now atd # 设置开机启动(now表立即)
[root@localhost ~]# systemctl status atd # 查看状态
● atd.service - Deferred execution schedulerLoaded: loaded (/usr/lib/systemd/system/atd.service; enabled; preset: ena>Active: active (running) since Thu 2025-03-27 14:33:09 CST; 44min agoDocs: man:atd(8)Main PID: 1092 (atd)Tasks: 1 (limit: 30931)Memory: 300.0KCPU: 3msCGroup: /system.slice/atd.service└─1092 /usr/sbin/atd -f3月 27 14:33:09 localhost.localdomain systemd[1]: Started Deferred execution s>
#查询哪一个安装包会产生 /binat这样一个命令文件
[root@localhost ~]# yum provides /bin/at
正在更新 Subscription Management 软件仓库。
无法读取客户身份本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。上次元数据过期检查:2:46:06 前,执行于 2025年03月27日 星期四 15时06分53秒。
at-3.1.23-10.el9.x86_64 : Job spooling tools
仓库 :baseos
匹配来源:
文件名 :/usr/bin/atat-3.1.23-11.el9.x86_64 : Job spooling tools
仓库 :@System
匹配来源:
文件名 :/usr/bin/atat-3.1.23-11.el9.x86_64 : Job spooling tools
仓库 :baseos
匹配来源:
文件名 :/usr/bin/at[root@localhost ~]#
rpm主要应用于查询
(rpm详见csa1note day8 8.2)
#ql查看at安装会产生那些文件
[root@localhost ~]# rpm -ql at
/etc/at.deny
/etc/pam.d/atd
/etc/sysconfig/atd
# etc at的配置文件
/usr/bin/at
/usr/bin/atq
/usr/bin/atrm
/usr/bin/batch
/usr/lib/.build-id
/usr/lib/.build-id/51
/usr/lib/.build-id/51/17efe7dfb1e32fbaf9ecd204a177d94e703975
/usr/lib/.build-id/79
/usr/lib/.build-id/79/25db2e565f80040edcf875f4df5e9904ef7994
/usr/lib/systemd/system/atd.service
#at命令的服务,开启at服务就是开启/system/atd.service
/usr/sbin/atd
/usr/sbin/atrun
#/uer/bin 全是新安装的命令
# bin sbin at的执行命令文件
/usr/share/doc/at
/usr/share/doc/at/ChangeLog
/usr/share/doc/at/README
/usr/share/doc/at/timespec
/usr/share/licenses/at
/usr/share/licenses/at/COPYING
/usr/share/licenses/at/Copyright
/usr/share/man/man1/at.1.gz
/usr/share/man/man1/atq.1.gz
/usr/share/man/man1/atrm.1.gz
/usr/share/man/man1/batch.1.gz
/usr/share/man/man5/at.allow.5.gz
/usr/share/man/man5/at.deny.5.gz
/usr/share/man/man8/atd.8.gz
/usr/share/man/man8/atrun.8.gz
# 用户手册(帮助查询命令)
/var/spool/at
/var/spool/at/.SEQ
/var/spool/at/spool
[root@localhost ~]#
at 的配置文件
#at.allow 优先级是最高的,只有该文件中的用户可以使用at命令,其他用户都不可以使用。此时,黑名单就失去作用。
# at.deny 系统中如果没有at.a1low,黑名单生效,只有黑名单中的用户不能使用at,其他人都可以。#编辑黑名单将redhat用户加入到黑名单中
[root@localhost ~]# vim /etc/at.deny
[root@localhost ~]# cat /etc/at.deny
redhat
[root@localhost ~]##此时红帽用户无法使用at命令
[redhat@localhost ~]$ at now
You do not have permission to use at.# 创建白名单 将redhat加入白名单
[root@localhost ~]# vim /etc/at.allow
[root@localhost ~]# cat /etc/at.allow
redhat
[root@localhost ~]## 此时 白名单的优先级高于黑名单 redhat用户可以使用at 命令
[redhat@localhost ~]$ at now
warning: commands will be executed using /bin/sh
at>
watch命令
[root@localhost ~]# watch -n 1 ls /tmp
#( -n (指定时间)
# -n 1 每一秒种 )
# 每一秒钟执行 ls /tmp 并显示到屏幕上
Every 1.0s: ls /tmp localhost.localdomain: Thu Mar 27 18:10:17 2025.....
systemd-private-6a7030bf37564a968864d49ae09ce45f-colord.service-f37564a968864d49ae09ce45f-rtkit-daemon.service-G5pJDh
systemd-private-6a7030bf37564a968864d49ae09ce45f-upower.service-ic0kRJ
vmware-root_919-4013854454
vmware-root_920-2731086625
vmware-root_921-3980298495
......
# ( 按 Ctrl+C 终止监控。)
#(按 Ctrl+G 可临时暂停刷新(部分终端支持) )
单一执行的例行性任务–at(一次性)
格式
at -参数 日期时间
参数
-m:当任务完成后,即使没有标准输出,也会给用户发送邮件
-l:列出系统上所有用户的at任务,等价于atq
-d:删除或取消一个任务
-v:使用时间格式,列出at任务
-c:可以列出任务之后的命令内容
-f:从文件中读取
时间格式
| 参数 | 说明 |
|---|---|
| HH:MM | 在今天HH小时的MM分钟执行,若时间点错过,将在明天执行 |
| HH:MM YYYY-MM-DD | 规定在某年某月的某一天的特殊时刻执行该工作 |
| now +2 minutes | 从现在开始的minutes、hours、days、weeks执行 |
#当安装好了一个服务程序,千万不要忘将该服务程序启动起来
[root@localhost ~]# systemctl start atd.service#交互式任务布置
[root@localhost ~]# at 19:42
warning: commands will be executed using /bin/sh
at> touch /tmp/{a..z}.txt
#(ctrl+d 退出交互模式)
#输入命令后需按 Ctrl+D 提交任务,若未正确退出交互模式,任务可能未被添加到队列中。# 查看待执行的任务列表
[root@localhost ~]# at -l
2 Thu Mar 27 18:27:00 2025 a root
3 Thu Mar 27 18:34:00 2025 a root
[root@localhost ~]##剧除未执行任务 通过任务id删除
[root@localhost ~]# at -d 3
[root@localhost ~]# at -d 2
[root@localhost ~]# at -l
[root@localhost ~]##在当前时间之后多久执行任务
[root@localhost ~]# at now + 1 minutes
warning: commands will be executed using /bin/sh
at> rm -rf /tmp/*
at> <EOT>
job 5 at Thu Mar 27 19:45:00 2025
[root@localhost ~]##指定日期执行任务 HH:MM YYYY-MM-DD
[root@localhost ~]# at 19:59 2025-03-27
warning: commands will be executed using /bin/sh
at> touch /tmp/touch{1..10}
at> <EOT>
job 6 at Thu Mar 27 19:59:00 2025
[root@localhost ~]##非交互模式执行at定时任务
# 解读:将命令变为字符串,通过echo发送给 at命令,到定时的时间点后,会将该字符串当做命令来执行
[root@localhost ~]# echo "ls /root > /tmp/123.txt" | at now +1 minutes
warning: commands will be executed using /bin/sh
job 7 at Thu Mar 27 20:09:00 2025
[root@localhost ~]#
练习
#1.使用 watch 命令监控 /tmp目录中的文件存在情况
[root@localhost ~]# watch -n 1 ls /tmp#2.使用at MM:SS的形式 在tmp目录中新建 a-z 26个文件
[root@localhost ~]# at 19:42
warning: commands will be executed using /bin/sh
at> touch /tmp/{a..z}.txt
at> <EOT>
job 4 at Thu Mar 27 19:42:00 2025
[root@localhost ~]#
#(ctrl+d 退出交互模式)
#输入命令后需按 Ctrl+D 提交任务,若未正确退出交互模式,任务可能未被添加到队列中。#3.使用 at now+X执行删除 /tmp中所有文件
[root@localhost ~]# at now + 1 minutes
warning: commands will be executed using /bin/sh
at> rm -rf /tmp/*
at> <EOT>
job 5 at Thu Mar 27 19:45:00 2025
[root@localhost ~]#
周期性任务
周期任务的时间安排
#分 时 日 月 周* * * * * 每分钟都会执行的任务0 * * * * 每小时都会执行的任务0,15,30,45 * * * * 每小时的第0分钟和第30分钟都会执行的任务0-10 * * * * 每小时0-10分钟内每分钟都会执行的任务*/5 * * * * 每5分钟都会执行一次的任务
格式
crontab [-u user] [-l| -r | -e]
命令选项
#为root用户编辑周期任务
[root@localhost ~]# crontab -u root -e
no crontab for root - using an empty one
(-u 指定用户 -e 进入编辑)# 任务内容 每周1,3,5 的 下午五点 每隔10分钟 执行一次 删除 tmp的任务
*/10 17 * * 1,3,5 /usr/bin/rm -rf /tmp/*-l #查看周期任务列表
[root@localhost ~]# crontab -l
*/10 17 * * 1,3,5 /uer/bin/rm -rf /tmp/*# -r删除定时任务,移除/var/spool/cron/username文件
#(-i删除定时任务,提示用户确认删除,避免出错)
# 删除root的周期任务
[root@localhost ~]# crontab -r -u root
[root@localhost ~]# crontab -l
no crontab for root#***如果想删除单独行进入编辑模式删除***
crontab的配置文件
#/etc/crontab 系统级别的周期任务列表,在里面编辑系统任务 不仅要写 周期安排 及 执行的命令 还要指明执行该任务的用户是谁
黑名单 # cron.deny
白名单 # cron.allow
# cron.d/ 自定义任务,用户可以自行定义周期任务放置于次目录中
月周期任务# cron.monthly/
日周期任务# cron.daily/
小时周期任务# cron.hourly/
周周期任务# cron.weekly/# 用户级别的周期任务 都会保存在 /var/spool/cron/用户名