Linux中的系统延时任务和定时任务与时间同步服务和构建时间同步服务器

延时任务

在系统中我们的维护工作大多数时在服务器行对闲置时进行

我们需要用延迟任务来解决自动进行的一次性的维护 延迟任务时一次性的,不会重复执行

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

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

at命令

格式

at <参数> <时间>

参数

|----------------------------------------|---------------------------------------------|
| 不加参数直接跟<时间> | 在指定的时间执行延时任务 |
| now + <num> <min/hours/days/weeks> | 从现在开始num<minutes/hours/days/weeks>后执行延时任务 |
| -m | 当任务完成之后,即使没有标准输出,将给用户发送邮件 |
| -l (atq) | 可列出目前系统上面的所有该用户的at调度 |
| -d (atrm) | 可以取消一个在at调度中的工作 |
| -v | 使用较明显的时间格式,列出at调度中的任务列表 |
| -c | 可以列出后面接的该项工作的实际命令内容 |
| -f | 从文件中读取作作业 |

其中不加参数直接跟时间的格式可以为

HH:MM

HH:MM YYYY-MM-DD

at + <hh:mm>(想要延时任务执行的时间)

bash 复制代码
at <时间>

如图我在19:12:40的时候想在19:14执行延时任务

root@localhost \~\]# at 19:14 warning: commands will be executed using /bin/sh at\> touch /mnt/vb{1..5} at\>\ job 1 at Tue Apr 22 19:14:00 2025

在编写完延时任务后,我们需要回车进入下一行然后按下ctrl + D结束编写延时任务,并生成延时任务进入延时任务队列。

当时间来到19:14:01时,延时任务已经自动执行完毕,生成了对应的文件。

now+<num>min 在输入at命令回车的那一刻延时n分钟后的任务

非交互执行at延时任务

在任意位置用vim编写一个脚本文件

使用多行重定向输入

使用sh命令执行脚本文件,就可以实现非交互式生成延时任务并执行

-r 删除延时任务

bash 复制代码
at -r <对应的延时任务序号>

-d 删除对应代号的延时任务

-v 显示延时任务将会在何时执行

-V 查看at的版本

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

-f 从文件中读取作作业

-m 任务完成后给用户发送

安装postfix
bash 复制代码
dnf install postfix.x86_64
安装s-nail
bash 复制代码
 dnf install s-nail.x86_64

touch命令的执行后是不会返回输出信息到终端的

但是-m参数会强制执行at任务后无论是否返回输出信息都发送邮件给用户

可以用mail来查看邮件

按数字顺序编号进行查看第几封邮件

用q键退出mail模式

延迟任务的安全优化

/etc/at.deny 使用at的黑名单

/etc/at.allow 使用at的白名单

注意:初始的主机是没有at.allow这个文件的!如有需要则要用户自己创建

一旦创建了at.allow这个文件,所有用户都会被禁止使用at命令除了root用户。

注意:当存在at.allow文件时,
at.allow文件里的用户名与at.deny文件里的用户名重复时
系统会允许那个用户执行at命令

crontab

检查crond服务是否开启

编写系统定时任务

其中* * * * *的含义是每月每周每天每小时每分钟执行一次命令

-r 删除

-i 显示删除提示

-l 列出用户的crontab

|------|------|----|----|----|---------------------------|
| 分钟 | 小时 | 天 | 月 | 周 | 定时效果 |
| * | * | * | * | * | 每小时的每分钟的01秒触发 |
| */n | * | * | * | * | 每隔n分钟的01秒触发 |
| n | * | * | * | * | 每小时的过n分钟 |
| n | a~b | * | * | * | 从a点到b点中间每个小时的过n分钟 |
| n | * | a | b | c | b月a日每小时过n分 b月的每个周c的每小时过n分 |

注:天和周是分开约定的

0和7都表示周日

系统级别的定时任务

在/etc/cron.d/下编写定时任务

每到设定的周期时间时系统则会自动执行

如图来到18:53时,系统自动创建了vba和vbb这两个文件

系统级别的定时任务执行完后,要记得及时删除否则会占用系统资源!

手动更改主机时间

查看当前主机的时间

timedatectl

先关闭时间同步

bash 复制代码
systemctl stop chronyd.service

更改主机时间

bash 复制代码
timedatectl set-time "yyyy-mm-dd hh:mm:ss"

这里成功更改主机时间为2077-7-7 7:07:07

手动更改主机时区

查看时区地区表

bash 复制代码
timedatectl list-timezones

从时区地区表选择地区进行更改

同理更改为其他地区也是可以的,下图更改为了阿曼

手动更改主机时间模式

bash 复制代码
timedatectl set-local-rtc <true/false>

启用本地时间模式

将 RTC 设置为UTC模式

更改授时源

编写系统中配置 Chrony 服务的配置文件

vim /etc/chrony.conf

将框住的部分更改为网络上能找到的授时源

重启chronyd.service服务让主机与授时服务器重新同步时间

bash 复制代码
systemctl restart chronyd.service

重启后还需要稍等服务器同步时间

相关推荐
yangmf204012 分钟前
如何防止 ES 被 Linux OOM Killer 杀掉
大数据·linux·elasticsearch·搜索引擎·全文检索
wanhengidc33 分钟前
企业为什么选择浙江电信服务器租用?
运维·服务器
請叫我菜鳥38 分钟前
Nginx反向代理的负载均衡配置
运维·nginx·负载均衡
yangshuo12811 小时前
家用服务器 Ubuntu 服务器配置与 Cloudflare Tunnel 部署指南
运维·服务器·ubuntu
I_Scholar1 小时前
mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz的下载安装和使用
linux·mysql
ziqibit1 小时前
Linux安全清理删除目录bash脚本
linux·bash
imhikaru2 小时前
Linux Shell 重定向与管道符号(>, >>, |)的实现机制
linux·服务器·网络
风筝超冷2 小时前
基于 Dify + vLLM插件 + Qwen3 构建问答机器人Docker版
运维·docker·容器
张三和李四的家2 小时前
ubuntu的libc 库被我 sudo apt-get --reinstall install libc6搞没了
linux·ubuntu
whoarethenext2 小时前
linux的时间轮
linux·运维·linq·时间轮