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执行一次时间同步
|| 是一种运算符号,叫做 逻辑或 运算,功能:如果左边命令执行成功了,就用不着在执行右边的命令;如果左边的命令执行失败了,那么就要执行右边的命令。