centos7中利用systemd.timer设置定时时间同步
背景centos7安装在windows中的vmware虚拟机中,一旦windows进入睡眠状态,则centos7也会休眠且系统时间会停止,因此centos7的系统时间会逐步比windows慢,想到用定时任务的方式去同步互联网时间,以保持centos7的准确。大家都很熟悉crontab了,但其只能精确到秒级别,查阅资料发现systemctld也有定时任务功能,于是进行了尝试。实现编写同步时间...
·
背景
centos7安装在windows中的vmware虚拟机中,一旦windows进入睡眠状态,则centos7也会休眠且系统时间会停止,因此centos7的系统时间会逐步比windows慢,想到用定时任务的方式去同步互联网时间,以保持centos7的准确。大家都很熟悉crontab了,但其只能精确到分钟级别,查阅资料发现systemctld也有定时任务功能,于是进行了尝试。
实现
- 编写同步时间脚步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.";
- 创建service单元custom.service
[Unit]
Description=service of timer created by daijiguo
[Service]
Type=simple
ExecStart=/usr/lib/systemd/system/custom.sh
- 创建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
注意点
- 如果custom.service不设置成开机自启,且不启动,单独启动custom.timer,则脚本只会运行一次然后通过
systemctl status custom.timer
发现状态为elapsed,原因不明,有知道同学可以指点一下。因此custom.service的启动和开机自启不可缺少。 - 在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
更多推荐
已为社区贡献4条内容
所有评论(0)