Linux基础24 定时任务, 定时发邮件, date命令, 时区,一次性任务at, 时间同步

date命令

复制代码
[root@localhost ~]# date
2023年 06月 01日 星期四 00:57:36 CST
[root@localhost ~]# date +%F
2023-06-01
>> date +%T     # 显示时分秒
16:55:40
[root@localhost ~]# date +%F-%T 2023-06-01-01:17:37 [root@localhost ~]# date +%Y 2023
>> date +%y-%m-%d  # 年月日
19-07-29
>> date
++%Y-%m-%d  # 年月日
2019-07-29 [root@localhost
~]# date +%m 06 [root@localhost ~]# date +%d 01 [root@localhost ~]# date +%H 01 [root@localhost ~]# date +%M # 分钟 20 [root@localhost ~]# date +%S # 秒 19 [root@localhost ~]# date +%Y%m%d%H%M%S # 年月日时分秒 20230601012125
# 减一天
>> date -d '-1day' +%F
2019-09-28
# 设置时间
date -s '2000-12-20'
date -s "20181001"
date -s "12:00:00"
date -s "20190909 12:00:00"
#向阿里同步时间
yum install ntpdate ntpdate time1.aliyun.com
复制代码

 

时区

复制代码
#修改时区
[mage@ubuntu ~]$timedatectl set-timezone Asia/Shanghai

# 显示所有时区
[mage@ubuntu ~]$ timedatectl list-timezones

[root@ubuntu2204 ~]# ll /etc/localtime
lrwxrwxrwx 1 root root 33 May  8 10:33 /etc/localtime -> 
/usr/share/zoneinfo/Asia/Shanghai
[root@ubuntu2204 ~]# cat /etc/timezone 
Asia/Shanghai
复制代码


定时任务:

crond就是计划任务,类似于我们平时生活中的闹钟,定点执行。

复制代码
#依赖cron守护进程
[root@rocky ~]# systemctl status crond.service
[root@ubuntu ~]#systemctl status cron.service

cron任务分为系统级任务和用户级任务

系统cron任务
操作系统自带的cron 任务,系统维护作业,/etc/crontab 主配置文件, /etc/cron.d/ 子配置文件
用户cron任务
每个用户自己名下的 cron 任务
红帽系统保存在 /var/spool/cron/USERNAME,Ubuntu 系统存放
在/var/spool/cron/crontabs/USERNAME,利用 crontab 命令管理

#系统cron任务是操作系统自己调用的任务,与用户无关,如果想添加系统级的cron任务,写在此文件中
[root@ubuntu ~]# cat /etc/crontab

用户计划任务
每个用户都有专用的cron任务文件:/var/spool/cron/crontabs/USERNAME

复制代码

 

企业需求:定时任务crond
1.做备份
2.做巡检
3.日志切割
4.临时文件清理
5.定时向互联网同步时间

 

定时任务:crond
命令:crontab

 

定时任务的配置文件:

#系统cron计划任务
[root@uegame ~]# vim /etc/crontab
复制代码
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin    # 能直接加载的路径,和当前环境变量$PATH不一样(crontab命令尽量使用绝对路径)
MAILTO=root            # 默认root来创建, 会给root发邮件,命令后面跟 &>/dev/null 定向到黑洞就不会发邮件

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)    # 写00或0都可以
# |  .------------- hour (0 - 23)        # 写00或0都可以
# |  |  .---------- day of month (1 - 31)    # 如果为31,如这个月没31就跳过
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
 分 时 日 月 周  root      命令

例:(如果直接编辑,crontab -l无法查到,这是系统级,测试要加root用户,否则无法执行)
* * * * * /bin/echo 1 >> /tmp/a.txt    # 每分钟执行一次    (>>写入定时任务的内容,而不是命令执行结果的内容)
59 * * * * /bin/echo 1 >> /tmp/a.txt    # 每个小时的第59分执行一次
59 00 * * * /bin/echo 1 >> /tmp/a.txt    # 每天凌晨12点59分执行一次
00  23  *  12  1 /bin/echo 1 >> /tmp/a.txt
复制代码

定时任务内容格式

复制代码
#每天的凌晨2点执行ls命令
00 02 * * * ls

#每月的1号的凌晨2点执行ls命令
00 02 1 * * ls

#每年的2月14日凌晨2点执行ls命令
00 02 14 2 * ls

#每周日的凌晨2点执行ls命令
00 02 * * 7 ls

#每年的6月份里面的每个周五凌晨2点执行ls命令
00 02 * 6 5 ls

#每个月的14号,但凡是一个周日,凌晨2点就执行ls
00 02 14 * 7 ls

#如果2月14号是周日就在凌晨的2点执行 ls命令
00 02 14 2 7 ls

#每天的凌晨2点,每隔10分钟执行一次ls命令(2点-3点之间,10分钟执行一次)
*/10  02 * * * ls

#每分钟执行一次ls命令     
* * * * *  ls

#每年的2月14日凌晨00点执行ls命令
00 00 14 2 *  ls

#每隔5分钟执行一次ls命令
*/5 * * * *  ls
*/5 * * * * /usr/sbin/ntpdate ntp.aliyun.com &>/dev/null

#每年的1月5月8月的每天的凌晨2点执行ls命令
00 02 * 1,5,8 * ls

#每月的1号到8号凌晨2点执行ls命令
00 02 1-8 * *  ls

#每天的21点执行ls命令
0 21 * * * ls

#每月的1号,10号,22号,的4点45分执行ls命令
45 4 1,10,22 * * ls

#每个月的1号到10号的4点45分执行ls命令   
45 4 1-10 * * ls

#每个月的每隔2天的8点03分,8点15分  9  10  11点 3分 15分
3,15 8-11 */2 * * ls

#每天7到23点每隔一小时执行一次ls
0 7-23/1 * * * ls

#每周一到周五的晚上21点15分执行ls命令
15 21 * * 1-5 ls      
复制代码
系统cron 任务相关文件
/etc/crontab #配置文件
/etc/cron.d/ #配置文件
/etc/cron.hourly/ #脚本
/etc/cron.daily/ #脚本
/etc/cron.weekly/ #脚本
/etc/cron.monthly/ #脚本

 

用户计划任务

  • crontab命令: 每个用户都有专用的cron任务文件:/var/spool/cron/crontabs/USERNAME
  • 默认标准输出和错误会被发邮件给对应的用户,如:mage创建的任务就发送至mage的邮箱
  • root能够修改其它用户的作业
  • 用户的cron中默认 PATH=/usr/bin:/bin,如果使用其它路径,在任务文件的第一行加PATH=/path 或者加入到计划任务执行的脚本中
  • 第六个字段指定要运行的命令。 该行的整个命令部分,直至换行符或“%”字符,指定的shell执行, 除非使用反斜杠(\)进行转义,否则该命令中的“%”字符将变为换行符,并且第一个%之后的所有 数据将作为标准输入发送到该命令。

定时任务命令

复制代码
crontab [-u user] [-l | -r | -e] [-i]

#常用选项
-l:查看定时任务 list -e:编辑定时任务 # 保存时会监测运行是否会有问题 -u:指定用户 # crontab -e -u qiudao编辑qiudao下的定时任务 (可在/var/spool/cron/下查看) # 注意: 可以在/var/spool/cron/下用户文件中直接编辑任务,但保存不会监测运行是否有问题 -r:删除所有定时任务 # crontab -u qiudao -r 删除qiuidao下所有定时任务 例: 添加和阿里同步时间的定时任务 crontab -e # 编辑定时任务(命令上方加入注释和作者名,规范) # 时间同步 By:ldc At:2023-06-03 */5 * * * * /usr/sbin/ntpdate &>/dev/null

#查看cron任务
[root@ubuntu ~]# crontab -l no crontab for root
#root 用户可以查看指定用户的 crontab(普通用户只能查看自己名下的 crontab)
[root@ubuntu ~]# crontab -u jose -l no crontab for jose

#编辑定时任务
[root@ubuntu ~]# crontab -e
#重定向创建
[root@ubuntu ~]# echo @reboot echo "this is test msg" | crontab

#删除任务,也可以进入文件一条一条删
#交互式删除
[root@ubuntu ~]# crontab -l
* * * * * echo "this is test cron from root"
* * * * * echo "this is test cron222 from root" &>/dev/null

[root@ubuntu ~]# crontab -ir crontab: really delete root's crontab? (y/n) y

[root@ubuntu ~]# crontab -l
no crontab for root
复制代码

#注: crontab -e写入 /var/spool/cron/root这个路径,等效于下面

echo '*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >>/var/spool/cron/root 

 

cron中的环境变量

cron中的环境变量和bash 中的环境变量不一致,所以在写 cron 任务时,命令路径要求写全路径,或先 在首部先定义PATH

复制代码
自定义PATH
#方法1,在计划任务配置中指定PATH
[root@rocky86 ~]# crontab -e
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/go/bin
SHELL=/bin/bash
* * * * * echo "${PATH} ;;; ${BASH};;; ${SHELL}" >>/tmp/cron-test.log

#查看日志
[root@ubuntu ~]# tail /tmp/cron-test.log 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/go/bin ;;; 
/bin/bash;;; /bin/bash
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/go/bin ;;; 
/bin/bash;;; /bin/bash

#方法2,在脚本中指定PATH变量
[root@ubuntu ~]# crontab -l
* * * * * /root/cron-test.sh

#脚本内容
[root@ubuntu ~]# cat cron-test.sh
#!/bin/bash
PATH=/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
echo $PATH >> /tmp/cron-sh-test.log
复制代码

 

定时任务备份案例

复制代码
1.每天的下午3,5点,每隔半小时执行一次sync命令
#每天的下午3,5点,每隔半小时执行一次sync命令 By:zls
*/30 15,17 * * * /usr/bin/sync &>/dev/null


2.每天凌晨3点做一次etc目录的备份,打包,备份到/backup目录下
需求:将备份命令写入一个脚本中

任务:
1.每天备份文件名要求格式:2018-02-20_hostname_etc.tar.gz
2.存放备份内容的目录要求只保留3天的数据
3.在执行计划任务时,不要输出任务信息

# 写脚本,通过定时任务执行脚本实现 vim backup_etc.sh
-----------------------------------------------------------
#!/bin/bash riqi=`date +%F` zhuji=`hostname` shijianchuo=`date +%F-%T` mkdir -p /backup # 记录日志, &&前面命令执行成功才会执行后面的命令 cd / && tar zcf /backup/${riqi}_${zhuji}_etc.tar.gz etc && echo "$shijianchuo 备份成功" >> /tmp/bak_result.txt find /backup -mtime +3 |xargs rm -f ------------------------------------------------------------
crontab
-e # 编辑定时任务 # 每天凌晨3点做一次etc目录的备份,打包,备份到/backup目录下 by ldc 00 03 * * * /bin/sh /root/backup_etc.sh &>/dev/null
复制代码
复制代码
练习题
1.在每个月的第一天压缩/etc目录下的所有内容,存放在/root/backup目录里,且文件名为当前系统时间?
00 02 1 * * /bin/cd / && /bin/tar czf /root/backup/$(date + \%F).tar.gz etc &>/dev/null    # %定时任务中百分号无法识别,需要转义

2.每月每天早上8点到下午18点每隔2小时的每30分钟执行test.sh脚本
*/30 8-18/2 * * * /bin/sh test.sh &>/dev/null

3.每月的4号与每周一到周三的11点重启vsftpd服务
00 11 4 * * /bin/systemctl restart vsftpd &>/dev/null
00 11 * * 1-3 /bin/systemctl restart vsftpd &>/dev/null
# which systemctl可以看到/usr/bin/systemctl中,/bin和/usr/bin是软链接,所以可以写/bin/systemctl
复制代码

crontab注意事项:

    1) 给定时任务注释
    2) 将需要定期执行的任务写入Shell脚本中,避免直接使用命令无法执行的情况tar date
    3) 定时任务的结尾一定要有&>/dev/null或者将结果追加重定向>>/tmp/date.log文件
    4) 注意有些命令是无法成功执行的 echo "123" >>/tmp/test.log &>/dev/null
    5)如果一定要是用命令,命令必须使用绝对路径

不允许特定用户添加定时任务(了解)

vim /etc/cron.deny
qiudao    # 写入用户名即可

 

计划任务如何调试

复制代码
1.crond调试
    1) 调整任务每分钟执行的频率, 以便做后续的调试。
    2) 如果使用cron运行脚本,请将脚本执行的结果写入指定日志文件, 观察日志内容是否正常。
    3) 命令使用绝对路径, 防止无法找到命令导致定时任务执行产生故障。
    4) 通过查看/var/log/cron日志,以便检查我们执行的结果,方便进行调试。

cron 程序日志文件
#Centos 中的日志在
/var/log/cron
#ubuntu 中的crontab 任务日志放在 /var/log/syslog 中
2.crond编写思路

    1.手动执行命令,然后保留执行成功的结果。
    2.编写脚本
        脚本需要统一路径/scripts
        脚本内容复制执行成功的命令(减少每个环节出错几率)
        脚本内容尽可能的优化, 使用一些变量或使用简单的判断语句
        脚本执行的输出信息可以重定向至其他位置保留或写入/dev/null
    3.执行脚本
        使用bash命令执行, 防止脚本没有增加执行权限(/usr/bin/bash)    # 如果脚本有执行权限可直接执行,但不好管理
        执行脚本成功后,复制该执行的命令,以便写入cron
    4.编写计划任务
        加上必要的注释信息, 人、时间、任务
        设定计划任务执行的周期
        粘贴执行脚本的命令(不要手敲)
    5.调试计划任务
        增加任务频率测试
        检查环境变量问题
        检查crond服务日志 /var/log/cron
复制代码

 

使用定时任务发邮件

复制代码
# 安装发邮件
yum install -y mailx vim /etc/mail.rc # shift+g调到最下面进行编辑
--------------------------------------------
#发件人 set from=xxxxxxxxxx@qq.com #发件人用户名 set smtp-auth-user=xxxxxxxxxx@qq.com  # 与发件人相同 #发件人密码(QQ邮箱不可以使用密码,只能使用授权码) set smtp-auth-password=xxx #登录方式 set smtp-auth=login #邮件服务器协议及端口 set smtp=smtps://smtp.qq.com:465 #忽略证书 set ssl-verify=ignore #指定证书位置 set nss-config-dir=/root/.certs ---------------------------------------------
# 进qq邮箱,点击上方设置,点账户,点击开启POP3
/SMTP服务,获取授权码 # 配置邮件证书 # 创建邮件证书的目录 mkdir -p /root/.certs cd /root/.certs/ echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt # 下面的命令一起执行 certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt certutil -L -d /root/.certs certutil -A -n "GeoTrust SSL CA -G3" -t "Pu,Pu,Pu" -d ~/.certs -i ~/.certs/qq.crt ---------------------------------------------
# 测试 cat /etc/passwd|mail -s 'passwd' xxxxxxxxxxx@163.com # -s 加上主题 --------------------------------------------

# 在/root/qingshu/路径下写多份文件

# 写定时任务脚本 vim send_qingshu.sh
---------------------------------------------
#!/bin/bash # 获取目录里第一个文件 qs_name=`ls -1 /root/qingshu/|head -1` shijianchuo=`date +%F-%T` # 发邮件 cat /root/qingshu/${qs_name} |mail -s '致XXX' xxxxxxxxxxx@163.com # 发送后删除这份邮件 if [$? -eq 0 ];then echo "$shijianchuo 邮件发送成功" >> /tmp/send_qingshu.txt rm -f /root/qingshu/$qs_name fi
-----------------------------------------------
# 编辑定时任务,执行发送邮件脚本
复制代码

 查看不同用户的cron 文件

复制代码
[root@ubuntu ~]# crontab -l
* * * * * echo "this is test cron from root"
[jose@ubuntu ~]$ crontab -l
* * * * * echo "this is test cron from jose"
[mage@ubuntu ~]$ crontab -l
no crontab for mage

#有cron任务的用户都会有对应的文件
[root@ubuntu ~]# ls -l /var/spool/cron/crontabs/
total 8
-rw------- 1 jose crontab 246 May 20 10:38 jose
-rw------- 1 root crontab 246 May 20 10:38 root
复制代码

cron 任务中的标准输入输出会发送邮件到用户邮箱

如果不想有邮件,则可以在定时任务中加上重定向

 

cron 中 % 的用法

cron任务中不建议使用%,它有特殊用途,它表示换行的特殊意义,且第一个%后的所有字符串会被将成当作命令的标准输入,如果在命令中要使用%,则需要用 \ 转义
注意:将%放置于单引号中是不支持的

30 2 * * * /bin/cp -a /etc/ /data/etc`date +\%F_\%T`
30 2 * * * /bin/cp -a /etc/ /data/etc`date +‘%F_%T’`   #错误写法

 

一次性任务

at 工具

  • 依赖与atd服务,需要启动才能实现at任务
  • at队列存放在/var/spool/at目录中,ubuntu存放在/var/spool/cron/atjobs目录下
  • 执行任务时PATH变量的值和当前定义任务的用户身份一致
  • 作业执行命令的结果中的标准输出和错误以执行任务的用户身份发邮件通知给 root
  • 默认CentOS 8 最小化安装没有安装邮件服务,需要自行安装
复制代码
at [option] TIME

#常用选项
-V #显示版本信息
-t time   #时间格式
[[CC]YY]MMDDhhmm[.ss] 
-l #列出指定队列中等待运行的作业;相当于atq
-d N #删除指定的N号作业;相当于atrm
-c N #查看具体作业N号任务
-f file #指定的文件中读取任务
-m #当任务被完成之后,将给用户发送邮件,即使没有标准输出

TIME:定义出什么时候进行 at 这项任务的时间
#HH:MM 在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务
02:00    
#HH:MM YYYY-MM-DD   规定在某年某月的某一天的特殊时刻进行该项任务
02:00 2016-09-20   
#HH:MM[am|pm] [Month] [Date]
06pm March 17
17:20 tomorrow

#用具本名词表示时间
noon #正午,中午12点
midnight #午夜,晚上12点
teatime #下午茶时间,下午4点
tomorrow #明天
now #当前时间
#HH:MM[am|pm] + number [minutes|hours|days|weeks], 在某个时间点再加几个时间后才进行该 项任务 now + 5 min 02pm + 3 days
复制代码

at程序的权限控制:

  • 白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能执行at命令
  • 黑名单:/etc/at.deny 默认存在,但内容为空,拒绝该文件中用户执行at命令,而没有在at.deny 文件中的使用者则可执行
  • 如果两个文件都不存在,只有 root 可以执行 at 命令
  • 权限控制是allow的优先级更高,如果用户在allow 和 deny 中都存在,则是有权限执行的

创建at任务有三种方式:交互式创建,输入重定向,at -f FILE

复制代码
[root@ubuntu ~]#apt install at

#交互式创建
[root@ubuntu ~]#apt install at

#在10:29分创建任务
[root@ubuntu ~]#at 10:29
warning: commands will be executed using /bin/sh
at Sat Jul 13 10:29:00 2024
at> touch /tmp/at-29
at> echo "at 29 success"    #echo会写到邮件中,用mail命令查看
at> <EOT>        #按ctrl+d结束
job 1 at Sat Jul 13 10:29:00 2024

#列出任务
[root@ubuntu ~]# at -l

#查看任务具体内容
[root@ubuntu ~]# at -c 1

查看还没有执行的任务
#任务保存在这个目录中
[root@ubuntu ~]# ls -l /var/spool/cron/atjobs/
total 4
-rwx------ 1 root daemon 2947 May 19 22:47 a0000201ac6709
 
#查看文件,就是上面输入的内容
[root@ubuntu ~]# cat /var/spool/at/a0000201ac6709

定时任务的输出都是输出到mail中

#原来生成的任务文件己经被删除了
total 0


#输入输出重定向
#创建
[root@ubuntu ~]# echo reboot | at now+5min
warning: commands will be executed using /bin/sh
job 11 at Sat May 20 00:13:00 2023

#查看
[root@ubuntu ~]# at -l
11 Sat May 20 00:13:00 2023 a root

#删除
[root@ubuntu ~]# at -d 11
[root@ubuntu ~]# at -l
[root@ubuntu ~]#
复制代码

定时任务一般都是要在将来的某个时间去执行,然后标准输出以及错误输出都不会写输出到终端,这是

因为,在任务执行的时候,当前终端没有连接上来,或者不是创建任务的用户;

 

时间同步

复制代码
#在Centos7上使用 ntpdate 对钟
ntp 时间慢慢追,渐进性同步 (可以防止时间突然跳跃,导致日志时间间隔大,服务时间异常情况)

#关闭时间同步功能
[root@ubuntu ~]# timedatectl set-ntp 0
#时间往后挪10年
[root@ubuntu ~]# date -s "+10 year"

#对钟
[root@c7 ~]# ntpdate ntp.aliyun.com
1 Oct 09:20:34 ntpdate[1733]: step time server 203.107.6.88 offset 
31536000.002912 sec


#centos8中取消了ntpdate, 且这种对钟方式,在最近一个10分钟的周期内,如果出现了误
差,则这10分钟内都是有问题的。
#centos8中使用chrony实现NTP时间同步。(timedatectl本身也有时间同步功能)
复制代码

chrony

复制代码
chrony (centos8开始使用)
可以做客户端,同步时间,也可以做服务器给别人同步时间

第一次,开机,或者服务重启 ------------------- 直接同步回来
后续是渐进式同步

#centos8自带,ubuntu要安装
[root@ubuntu ~]#apt install -y chrony

#chrony配置文件(配置文件放不下,就放到/etc/chrony/conf.d中)
[root@ubuntu ~]#vim /etc/chrony/chrony.conf
#下面是源,从哪里同步时间回来
pool ntp.ubuntu.com        iburst maxsources 4
...
复制代码

配置文件常用字段

 NTP 客户端工具

chronyc 可以运行在交互式和非交互式两种方式

复制代码
#交互式客户端有以下常用子命令‘
help #显示帮助信息
accheck #检查是否对特定主机可访问当前服务器
activity #显示有多少NTP源在线/离线
sources [-v]   #显示当前时间源的同步信息
sourcestats [-v] #显示当前时间源的同步统计信息
add server #手动添加一台新的NTP服务器
clients #报告已访问本服务器的客户端列表
delete #手动移除NTP服务器或对等服务器
settime #手动设置守护进程时间
tracking #显示系统时间信息
复制代码

实际生产中修改配置文件

复制代码
[root@ubuntu ~]#vim /etc/chrony/chrony.conf
#注释pool行
#添加下列行(就对一台阿里云)
server ntp.aliyun.com iburst

#重启服务
[root@ubuntu ~]# systemctl restart chronyd.service

#chrony 是渐进式同步,如果差距过大,想立即同步完成,则可以重启服务
复制代码

 

 时间工具 timedatectl

timedatectl :时间查看和设置工具

复制代码
timedatectl [OPTIONS...] COMMAND ...

#常用选项
-h|--help #显示帮助信息
--version #显示版本信息
-a|--all #显示所有属性
--value #查询时仅显示值,不显示字段标题

#常用子命令
status           #显示当前时间设置,默认项
show             #以友好格式显示,具体同容同 status 
set-time TIME     #修改时间
set-timezone ZONE #修改时区
list-timezones   #列出当前可用时区
set-local-rtc BOOL #RPC时间是否关联本地时区
set-ntp BOOL     #是否开启ntp 服务

#修改时间
[root@ubuntu ~]# timedatectl set-time "2042-10-15 00:00:00"
[root@ubuntu ~]# date +"%F %T"
2042-10-15 00:00:16
#查看
[root@ubuntu ~]# timedatectl show -a
Timezone=Asia/Shanghai
LocalRTC=no
CanNTP=yes
NTP=yes
NTPSynchronized=no
TimeUSec=Wed 2042-10-15 00:00:18 CST
RTCTimeUSec=Wed 2042-10-15 00:00:18 CST

#开启ntp时间同步服务
[root@ubuntu ~]# systemctl is-active chronyd.service 
inactive
[root@ubuntu ~]# timedatectl set-ntp 1
[root@ubuntu ~]# systemctl is-active chronyd.service 
active

#timedatectl本身也有同步时间功能,如果有chrony服务,关闭timedatectl同步时间功能,会把chrony服务关闭

#NTP服务开启,时间被同步回来
[root@ubuntu ~]# timedatectl 
               Local time: Tue 2023-05-30 11:25:52 CST
           Universal time: Tue 2023-05-30 03:25:52 UTC
                 RTC time: Tue 2023-05-30 03:25:52
               Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
             NTP service: active
         RTC in local TZ: no
复制代码

 

阿里云,内网之间的流量,是不收费的

实现私有时间服务

在同一个网络内,如果有多个需要进行时间同步的服务器,则我们可以在内网自建NTP Server,

这样可以节约访问外网的网络资源;另一方面,如果外网不可用,则至少可以保证,内网的NTP服务还 是可用的。

 服务端配置

复制代码
[root@ubuntu ~]# vim /etc/chrony/chrony.conf

allow 10.0.0.0/24 #允许10.0.0 网段的主机将本机作为时间同步服务器
local stratum 10 #允许本机在不能与外网同步的情况下,还能提供服务

#重启服务
[root@ubuntu ~]# systemctl restart chrony.service

#关闭防火墙
[root@rocky86 ~]# systemctl stop firewalld.service
复制代码

Rocky8客户端配置

复制代码
#添加 server,生产环境下至少两台,保证高可用
[root@rocky ~]# vim /etc/chrony.conf
server 10.0.0.206 iburst

#重启服务
[root@rocky ~]# systemctl restart chronyd.service

[root@rocky ~]# chronyc -n sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 10.0.0.206                    3   6   377    35   -107us[ -215us] +/-   24ms
复制代码

Ubuntu客户端配置

复制代码
#添加 server,生产环境下至少两台,保证高可用
root@ubuntu22:~# vim /etc/chrony/chrony.conf
server 10.0.0.206 iburst

#重启服务
root@ubuntu22:~# systemctl restart chrony.service

#查看
root@ubuntu2204:~# chronyc -n sourcestats
Name/IP Address           NP NR Span Frequency Freq Skew Offset Std Dev
==============================================================================
10.0.0.206                 10   4   394     -0.062      1.336  -1610ns   116us
复制代码

服务器上查看

[root@ubuntu ~]# chronyc clients
Hostname                     NTP   Drop Int IntL Last     Cmd   Drop Int Last
===============================================================================
10.0.0.150                     15      0   6   -    32       0      0   -     -
10.0.0.210                      8      0   6   -    60       0      0   -     -

 

posted @   战斗小人  阅读(245)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示