linux学习之旅(十四)

时间:2021-12-05 06:54:35

系统延时及定时任务

一.系统延时任务 ( 延时任务是临时的 )

1.at命令

at 命令可以指定某一任务在将来的特定时间运行。该作业可能是一次备份 、对您系统的检查或者特定时间发送的通知。那些需要花费很长时间才可完 成的作业正适合 at 命令。仅需使用 at 命令将任务设置为在一分钟或两 分钟之后运行。然后您便可以安全注销 , 因为该任务会在与 shell 会话 断开连接的情况下运行

at 命令必须指定任务应运行的时间。该指定可以是具体时间和 / 或日期 ( 例如星期一 , 10:00pm 或 7 月 15 日 ) 。也可以是当前时间的相 对时间 ( 现在时间加上 5 分钟 , 现在时间加上 3 天或 4:00pm 加上 1 周 ) 通过添加其他选项 , 您可以在任务完成是发送邮件 ( -m ), 或者 从文件中读取任务 ( -f 文件 ), 而无需通过标准输入进行

at  +  time
at> 延迟的动作
ctrl+d ##保存退出

at -l | atq ##查看当前任务
atrm | at -d +任务号 ##取消指定任务
at -c +任务号 ##查看任务内容
at now+1min ##延时一分钟
at -f file time ##延时执行文件中的内容(文件不是脚本)
at -m (at命令后添加)##延时命令没有输出时也发送邮件给执行者,当你命令没有输出,也要发送邮件给执行者,但邮件内容是空的
at -M (。。。) ##延时命令即使有输出也不发送邮件给执行者
at now+1min -f file ##(设置时间发送文件)
  • mail 可以收邮件,默认有输出的命令才可以发起邮件

2.at命令的执行权力设定

/etc/at.deny ##用户黑名单,此名单中的用户不能执行at命令 (直接在文件中写用户名) 

/etc/at.allow
##用户白名单,名单默认不存在,本身只有at.deny这一个文件,但是名单一旦出现,即touch /etc/at.allow,那么用户黑名单(at.deny)失效,而且系统默认所有用户默认不能执行at,只有在这个名单中出现的用户可以使用at命令(优先级高于黑名单)。文件也是直接进去写

*两个文件即改即生效*
  • 可以man 5 at.allow
    linux学习之旅(十四)

二.定期任务

定时任务是永久的

定时任务程序crond,在系统中每分钟做任务扫描

cron 设备管理必须按计划定期重复运行的程序。后台程 crond 每分钟唤醒一次 , 以运行计划的任何任务用户使用 crontab命*个人任务。系统管理员可以在系统范围配置文件中设置任务

1.发起方式

发起方式一(命令发起)

crontab -u username -e      ##username用户建立定时任务(默认vi编辑器进入编辑)
crontab -e 以自己身份写
##可以写多行
"此命令会进入一个文本,该文本的填写方式是: 分 时 天 月 周 + 命令"
crontab -u username -r ##查看某用户的定时任务
crontab -u username -l ##删除某用户的定时任务
man 5 crontab
  • 如果在里面默认写创建文件时,这个文件默认创建在这个用户的家目录下
  • 比如在 crontab -u student -e 中写了 * * * * * touch yyuyuyuyuyu 那么,这个文件被默认创建在了/home/student,即student的家目录下面
    linux学习之旅(十四)

发起方式二(文件发起)

文件一:
/var/spool/cron/root(文件名谁发起就是谁的,也可以是student…)

  • man crontab:
    linux学习之旅(十四)
  • 在里面写,等同于crontab -u root -e,用crontab -u root -l 也能看见 。直接写入,不需要执行权限,直接生效
    linux学习之旅(十四)

但是,用文件名区分,就要创建很多不同名的文件,非常麻烦,所以文件二就比较的重要了

文件二:
/etc/cron.d/filename (这里面写的是任务)

属于系统的任务通常保存在 /etc/crontab 文件中而不是使用 crontab -e 编辑保存在个人文件中。更好的做法是用文本编辑器创建 crontab 文件并保存到 /etc/cron.d 中 ( 避免更新 系统软件包 cronie 时出现问题 ) 。
/etc/cron.d/crontab 文件在日期说明后另加一个字段 , 表示将运行作业的用户 对于需要每天、每周或每月运行一次的脚本 ,
可以直接将其设 置为可执行文件 , 并保存在 /etc/cron.{daily,weekly,monthly} 中相应目录下。这些任务由 /etc/anacrontab 配置的系统 anacron 服务运行anacron 是 cron 的集成组件 , 用于更好地管理作业 , 并确保在作业。

  • 注意: /etc/cron.d 是脚本文件,需要保证cron.d有执行权限,才可以使目录里面的任务文件生效
vim /etc/cron.d/filename //创建一个文件并在里面填写,此文件可以填写多个用户

填写方式是:
"分钟 小时 天 月 周 用户 动作"
分 时 天 月 周 + 用户 + 命令
* * * * * root touch /mnt/file
//表示每分钟在/mnt目录下建立一个文件file,而且也是crontab不会看到的,也不会出现在/var/spool/cron/root

/etc/cron* 每个目录都有固定的效果,比如目录下有监控文件logrotate,如果有在关机状态时间内应该执行的定期动作,那么在开机时,会监控到之后,自动执行这些命令。

2.时间表示方法

man 5 crontab :
linux学习之旅(十四)
表示方式 : 分 时 天 月 周 命令(最精确只能精确到分钟,即最短也是每分钟执行)(必须都要有,不能省略)
eg:
* * /2 * #每隔两天
* 08-17/2 * * * #八点到下午两点每隔两个小时
* * 01,15 * 6 #每月一号,15号及周六

linux学习之旅(十四)

2.crontab命令的执行权力设定

/etc/cron.deny  //用户黑名单,此名单中的用户不能执行crontab命令' 

/etc/cron.allow #白名单,名单默认不存在,但是名单一旦存在,黑名单失效
#建立后所有用户均没有at命令执行权限,只有在名单中出现的用户可以使用(直接在文件中写用户名)
类似于at.allow at.deny

即改即生效

三:系统中的临时文件

系统中服务在正常运行时会产生临时文件
/usr/lib/tmpfiles.d/*.conf #系统中临时文件的配置

  • 在系统中 /usr/lib/tmpfiles.d/ 目录下存放
  • 系统的临时文件配置是 /usr/lib/tmpfiles.d/*.conf,自己创建的临时文件配置文件必须以.conf结尾

临时文件配置的编写方式是:
文件类型 文件名称 文件权限 文件所有人 文件所有组 文件存在时间(此时时间没到就删不掉,clean不掉)

eg:
d /mnt/westos 777 root root 10s
##表示在/mnt目录下创建临时目录westos,并且十秒内不能被删除

systemd-tmpfiles --create  /usr/lib/tmpfiles.d/*  //##执行临时文件配置
systemd-tmpfiles --clean /usr/lib/tmpfiles.d/* ##清理临时文件
##注意,可能在运行时会和之前设定的crontab冲突,所以如果在试验中出现问题,比如无法创建,那么可能执行了定时任务删除
  • eg:建立目录/mnt/demo,此目录中的文件必须存在2分钟以上才会被清理,系统每分钟清理/mnt/demo一次
    编写脚本
    linux学习之旅(十四)
    运行之后:
    linux学习之旅(十四)
    整点两分钟之后:
    linux学习之旅(十四)
    //目录的子文件已经删除