Linux计划任务和时间同步

2023年 10月 13日 48.6k 0

1 什么叫计划任务

计划任务:就是有计划地去做一项任务,其实计划任务是到了固定的时间点,让机器自动去做制定的任务;

1.1 crontab 的快速实例入门演示

Linux 下最常用的计划任务软件叫做 crontab,软件的名字,本身也是命令的名字。

实例:

  • 指定一个任务,每天早上 8:00 时,检查一下硬盘调 容量,并且记录下来

  • 执行 crontab 命令

    crontab -e
    
  • 命令执行后,会进入一个 vim 文档编辑的界面,在这里输入一下内容:

    0 8 * * * df -h >> /tmp/df.log
    
  • 保存退出即可,计划任务指定完成。

  • 说明:Linux 下的 crontab 计划任务是按人头划分的,每个用户都可以定义自己的计划任务,默认情况下,彼此之间是看不到的,也无法修改别人的计划任务,除非是 root 用户权限

    执行 crontab -e 后,就等于是“ 进入自己的计划任务编辑模式 ”,其实就是 vim 打开了 /var/spool/cron/下的一个文件,这个文件就是用来保存每个用户的计划任务,按照用户名来记录。

    任务的编写格式:

    0 8 * * * df -h >> /tmp/df.log
    

    前半部分由 5 部分组成,按照从左到右的顺序分别代表 分,时,日,月,周

    • 分:相当于是钟表的分针,代表第几分的意思
    • 时:相当于是钟表的时针,代表第几个小时的意思,这里的是 0 点到 24 点
    • 日:也就是日历中的几号
    • 月:也就是日历中的几月
    • 周:周一,周二,... 周日
    • *:代表是任意,不管是几月,几号,几周,只要到了前面的时间就执行 某 任务,也就是等于一年 365 天,天天到点执行该任务

    1.2 如何缩短 crontab 的时间间隔

    crontab 中最小的单位是 1min,这个是硬性规定的,所以需要用新的命令来实现所要的功能。

     sleep2 ; ping www.baidu.com	--分号功能:先执行分号左边的语句,然后再执行分号右边的语句,这一行是输入完按Enter键后暂停 									2s,然后才开始 ping 
    

    首先,最终目的是让 crontab 实现 10s 一次地执行命令 A,6 行命令 * * * * *,也全都是执行同样的命令 A

    假设 现在时间是 14:00:00,计划任务启动,这 6 行任务既然都是每分钟执行一次,那么他们就会被同时触发,也就是说到了 14:00:00的时候,命令 A 就在这一瞬间被同时执行了 6 次

    不过,有 sleep ,所以每一行执行都会被延迟执行,例如,第一行的命令 A 会在 14:00:00 就被立即执行,第二行的命令 A 会执行等待 10s ,10s 后才会执行命令 A。这样 虽然 6 行命令都被同时执行,但是后一行会在前一行运行过 10s 后,才会运行,这样如此循环就实现了每 10s 一次的计划任务。

    tail -f /root/sleep.log		-- 这个命令可以通过 date 验证是否10s 执行一次
    

    2 时间同步的引入

    2.1 认识时间同步的重要性

    游戏中的大区,还有跨服对战区等,其实从技术的角度出发,游戏中所谓的不同大区,也就是不同的服务器,同一台服务器上的玩家们是再同一个区的。

    跨服对战区是一种处在中间的临时区域,只有在开启跨服对战时,两个不同大区的玩家才会凑到一起比武较量

    假设晚 21:00 有一场跨服大战,报名截止 20:50,由于服务器上的时间没有同步,导致每台服务器时间不一样,玩家游戏画面中的时间自然也就不一样。

    这种情况下,第一区的玩家时间还处在 20:30,有些玩家还没有到报名时间,而另一个区的玩家时间是 20:50,准备进入了,可是战场服务器的时间却已经是 21:10,已经开始 10min 了。所以服务器时间的不统一,会造成很尴尬的后果。

    2.2 时区和时间的设置

    使用date命令后

    CST:代表时区,每个国家所处的地理位置不同所以每个国家的时区会不同的。例如:日本时间 12:00,北京时间时差 1h,所以 12:00-1h就是当前北京时间。时区的不同可以通过 + - 的方法来推算时间。

    EDT:是美国东部夏令时时间

    CST:是 China Standard Time UT+8:00,是美国时区

    timedatectl set-timezone Asia/Shanghai		
    --设置为上海的时区然后通过 date 命令修改时间 date -s "2020-11-26 09:03:00"
    

    这样设置并不是十分准确的,所以用另一种更高级的方法来同步时间:

    ntpdate 0.asia.pool.ntp.org			-- ntpdate + 时间服务器名字(IP地址)
    

    网上有很多的 NTP 服务器,全程 Network Time Protocol,即网络时间协议,是用来使计算机时间同步的一种协议,以一个 NTP 服务器上的时间为准,把自己的服务器跟他进行同步,来校正我们的时间,网页搜索即可得到NTP服务器。

    2.3 用 ntpdate + crontab 实现时间同步

    ntpdate 仅仅是当时同步一次

    0 */2 * * * ntpdate 0.asia.pool.ntp.org || ntpdate ntp1.aliyun.com		-- 可以使用计划任务,2h执行一次时间同步
    

    || 是一种运算符号,叫做 逻辑或 运算,功能:如果左边命令执行成功了,就用不着在执行右边的命令;如果左边的命令执行失败了,那么就要执行右边的命令。

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论