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

场景:

  • 生活中,我们有太多场景需要使用到闹钟,比如早上 7 点起床,下午 4 点开会,晚上 8 点购物,等等。

  • 在 Linux 系统里,我们同样也有类似的需求。比如我们想在凌晨 1 点将文件上传服务器,或者在晚上 10 点确认系统状态,等等。

  • 但我们不可能一直守在电脑前,毕竟我们也需要下班/睡觉,还要陪女朋友(new一个也行)。而且即使在上班期间,如果到点了还需要人工操作,未免效率太低了。

  • at 命令就是为这个需求而诞生的。使用 at 命令,你可以在特定时间自动完成你所设定的任务,也可以实现自动化,非常方便快捷!

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

安装

  • 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  # 查看状态

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执行
实验1
  • 延迟执行ls /root ,并将结果写入到at.txt中

[root@server ~]# at  14:17
warning: commands will be executed using /bin/sh
at> ls  /root  >  at.txt
at> <EOT>      # 点击ctrl+d 结束交互性界面
​
[root@server ~]# at  -l   # 查看已存在的计划任务
3   Thu May 25 14:17:00 2023 a root
[root@server ~]# atq      # 同上
3   Thu May 25 14:17:00 2023 a root
实验2
  • 不使用交互性命令实现,通过管道符命令执行

[root@server ~]# echo  "echo  'hello  again'  >>  at.txt" | at  now  +1  minute
注意
  • at命令只要指定的时间正确,就可以执行对应的命令

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

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

  • 过程:输入at 时间 -> 回车 ->输入执行的命令->ctrl+d退出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 的密码 。
新的密码:                       # 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 ~]# 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值