当前位置: 首页 > news >正文

Linux系统的延迟任务及定时任务

延迟任务的发起

在系统中我们可以使用at命令来发起延迟任务

at命令执行是调用的是atd服务,即使系统最小化安装atd也会被安装到系统中

at 任务信息存放在系统中/var/spool/at目录中

at 任务的日志文件被存放到/var/log/cron中

at 任务执行时如果遇到系统处于关闭状态,那么在开启时atd任务会检测未执行的任务并且立即执行。

 # systemctl status atd.service 查看延时任务有无开启】atd 是系统延时任务的守护进程,如果此程序关闭,那么系统延时任务无法使用。

# at 19:05                       【延迟并选择命令执行的时间】

at> touch /mnt/file{1..5}              —要执行的命令

at> <EOT>                     <<【 敲CTRL +D表示命令执行,任务录入结束】

at命令参数

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

# mkdir /rhel9

# mount /dev/sr0 /rhel9

# cd /etc/yum.repos.d/

# vim rhel9.repo

可以通过查看选择安装发送邮件的代码

# dnf search mail

# dnf install postfix.x86_84 s-nail.x86_64         —安装邮件系统

【postfix.x86_84发送邮件程序       s-nail.x86_64查看邮件的程序】

# systemctl enable --now postfix        —开启程序

【显示的是还没有邮件】

显示at命令产生的输出以邮件形式输出

退出mail界面使用q

注意:at执行的命令如果执行了,但是没有输出,就不会给用户发邮件

# at -m now+1min           —有没有输出都产生邮件

-l atq的别名,可列出目前系统上面的所有该用户的at调度

# at now+5min                   【5分钟后执行命令】

# at -l 【查看任务列表】

# at -r 1 【删除任务  1 】

-d atrm的别名,可以取消一个在at调度中的工作   【和 -r 效果相似】

-v 使用较明显的时间格式,列出at调度中的任务列表

-V 显示at的版本

-c 可以列出后面接的该项工作的实际命令内容

# at -c 7       【7是延时命令的序号】

-f 从文件中读取任务

如何非交互的设定延迟任务

在生产环境中我们通常会用脚本来设定一个或多个延迟任务但是at任务的执行需要交互的进行,这样无法满足脚本自动化运行,输入重定向可以解决交互问题:

# watch -n 1 "ls -lR /mnt/"   监控命令】

# vim at.sh

# sh at.sh       【执行脚本】

延迟任务的安全优化

系统中默认只存在黑名单/etc/at.deny

# vim /etc/at.deny     【/etc/at.deny是at命令的黑名单,写在里面的用户无法执行at命令】

# vim /etc/at.allow    【at白名单,只有root用户和在白名单中的用户可以执行at任务】

注意:此名单在系统中不存在,一旦建立黑名单中的内容将被系统忽略

黑白名单为用户列表,每个用户一行

定时任务简介       

【定时任务是永久的,延时任务是一次性的】

和延迟任务类似,我们可以用crontab来解决自动进行的周期性的维护

定时任务类似手机闹钟,会重复执行

当定时任务产生输出后,这些输出会以邮件的形式发送给延迟任务发起者

在RHEL9中默认系统中的所有普通用户都可以发起定时任务

定时任务发起

在系统中我们可以使用crontab命令来发起用户级定时任务。

在系统中/etc/cronfilename 是系统级定时任务,只有root用户可以发起。

定时任务执行是调用的是crond服务,即使系统最小化安装crond也会被安装到系统中。

定时任务信息存放在系统中/var/spool/cron目录中,存放文件和发起人名称一致。

定时任务的日志文件被存放到/var/log/cron中。

定时任务执行时如系统处于关闭状态,那开启时crond任务会检测未执行的任务并立即执行。

        # systemctl status crond.service     【定时任务的守护进程】

发起用户级周期行任务

周期任务发起方式

crontab命令的执行格式为:crontab –u 用户 –e

-u:用来设定某个用户的crontab服务此参数一般有root用户来运行。

# crontab -u root -e

*    *     *  *  *     touch …

分钟 小时 天 月  周

-e:编辑用户的crontab文件内容。如果不指定用户则表示编辑当前用户crontab文件。

-l:显示某个用户的crontab文件内容,如果不指定用户,则显示当前用户的。

-r:从/var/spool/cron目录中删除某个用户的crontab文件

-i:在删除用户的crontab文件时给确认提示【输入y表示确定执行命令】。

crontab 设定定时任务是会以vi命令打开临时文件,保存时把内容同步到/var/spool/cron中。

系统级别crontab目录详解

/etc/cron.d                       系统自定义周期任务

/etc/cron.daily                    每天周期任务

/etc/cron.hourly                   每小时周期任务

/etc/cron.monthly                 每月周期任务

/etc/cron.weekly                  每周周期任务

注意:把要执行的动作记录为脚本,并把脚本放到相应的目录中就会以相应的时间执行。

# watch -n 1 "ls /media/ -l"    监控命令】

# cd /etc/cron.d     【进入自定义周期任务目录

# vim   xxx    自定义名字,创建系统级别crontab任务

* * * * *   root   touch /media/lee{1..5}            —这里输入的脚本会自动运行

定时任务执行优化

系统当中默认每个人都能执行crontab命令

系统中默认只存在黑名单/etc/cron.deny,写入此文件中的用户会被禁止使用定时任务

# echo test > /etc/cron.deny         【输入黑名单用户】

在系统中可以手动建立白名单/etc/cron.allow,当此文件出现黑名单不会被检测

# echo test > /etc/cron.allow              【输入白名单用户】

练习:在系统中设定延迟任务要求如下 

        1,在系统中建立easylee用户,设定其密码为easylee

        2,延迟任务由root用户建立

        3,要求在5小时后备份系统中的用户信息文件到/backup中

        4,确保延迟任务是使用非交互模式建立

        5,确保系统中只有root用户和easylee用户可以执行延迟任务的设定

1,# useradd easyle             # echo easyle | passwd --stdin easyle

2 - 4,# vim at.sh                 【选择root用户,建立非交互模式的脚本】

        mkdir /backup

        cp  /etc/passwd  /backup

# at -v now-5hour                  【配置延时任务】

>> sh at.ch                        【非交互模式运行任务】

5,vim /etc/at.allow                【配置白名单】

        root

        easylee

练习:在系统中设定定时任务并优化定时任务 

        1,每天凌晨4点显示系统的根设备使用信息并以邮件的形式发送到root邮箱中

        2,确保此任务为系统定时任务

确定邮件系统安装成功   # dnf install postfix.x86_84 s-nail.x86_64

# systemctl enable --now postfix        —开启程序

# cd /etc/cron.d     【进入自定义周期任务目录

# vim   xxx

00 04 * * *    root df -h / | mail -s ’date’ root

# mail -u root          【查看邮箱邮件】

相关文章:

  • 阶段性人生答疑解惑篇:穿越市场迷雾,重构生命坐标系
  • 从数据到智慧:解密机器学习的自主学习密码
  • 下篇:深入剖析 BLE GATT / GAP / SMP 与应用层(约5000字)
  • .NET代码保护混淆和软件许可系统——Eziriz .NET Reactor 7
  • React-JSX语法
  • 第七届能源系统与电气电力国际学术会议(ICESEP 2025)
  • 深入探索RAG(检索增强生成)模型的优化技巧
  • 考研系列-计算机组成原理第二章:数据的表示和运算
  • 【UML建模】starUML工具
  • synchronized关键字的实现
  • 第二篇:Django配置及ORM操作
  • 金融软件测试有哪些注意事项?专业第三方软件测试服务机构分享
  • 【leetcode100】组合总和Ⅳ
  • AIP代码生成器——标准化接口开发智能工具
  • 算法之分支定界
  • 多语言虚拟币海外游戏娱乐平台源码详解(整合篇)
  • 架构-系统可靠性分析与设计
  • 复杂性决策-思维训练
  • JAVA设计模式——(五)享元模式(Flyweight Pattern)
  • 缓存与数据库数据一致性:旁路缓存、读写穿透和异步写入模式解析
  • 研究|和去年相比,人们使用AI的需求发生了哪些变化?
  • 龙头券商哪家强:中信去年营收领跑,中金净利下滑
  • 看正背面月壤、听火星上的声音,记者探营“中国航天日”科普展
  • 融入长三角一体化发展,苏南名城镇江的优势和机遇何在
  • 创单次出舱活动时长世界纪录,一组数据盘点神十九乘组工作成果
  • 2025年度“沪惠保”今日开售:保费维持129元/人,进一步扩增国内外特药种类