背景

centos7安装在windows中的vmware虚拟机中,一旦windows进入睡眠状态,则centos7也会休眠且系统时间会停止,因此centos7的系统时间会逐步比windows慢,想到用定时任务的方式去同步互联网时间,以保持centos7的准确。大家都很熟悉crontab了,但其只能精确到分钟级别,查阅资料发现systemctld也有定时任务功能,于是进行了尝试。

实现

  1. 编写同步时间脚步custom.sh
#首先,进入到/usr/lib/systemd/system目录
#然后,创建custom.sh脚步,内容如下:

#!/bin/bash
echo "sync time starting...";
ntpdate 1.cn.pool.ntp.org;hwclock -w;
echo "sync time completed.";
  1. 创建service单元custom.service
[Unit]
Description=service of timer created by daijiguo

[Service]
Type=simple
ExecStart=/usr/lib/systemd/system/custom.sh
  1. 创建timer单元custom.timer
[Unit]
Description=timer defined by daijiguo

[Timer]
#设置定时任务
OnCalendar=*-*-* 12:00:00
Unit=custom.service

[Install]
WantedBy=multi-user.target

4.设置custom.service和custom.timer开机启动

#开机自启
systemctl enable custom.service
systemctl enable custom.timer
#启动单元
systemctl start custom.service
systemctl start custom.timer

注意点

  1. 如果custom.service不设置成开机自启,且不启动,单独启动custom.timer,则脚本只会运行一次然后通过systemctl status custom.timer发现状态为elapsed,原因不明,有知道同学可以指点一下。因此custom.service的启动和开机自启不可缺少。
  2. 在custom.timer中创建定时任务的时候,如果要每隔一定周期运行一次任务,则使用OnUnitActiveSec=进行配置;如果要使用跟复杂的表达式,则使用OnCalendar=进行配置,切不可乱用,具体可以参考官方手册。

参考:
https://www.freedesktop.org/software/systemd/man/systemd.time.html#
https://www.linuxidc.com/Linux/2019-05/158599.htm
https://cloud.tencent.com/developer/article/1412404
https://www.cnblogs.com/whymoney1000/p/11059803.html

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐