遇到的用户需求:
ubantu下的一体机或者虚拟机中,用户要求写一个校正程序修改系统时间。因为机子用的内网,不能同步网络时间,导致时间经常和网络时间差较大。用户提供了校正服务器的接口,当用接口获取数据时,成功会返回当前时间的时间戳。
接口描述如下:
解决思路:
写一个定时器,定时获取接口数据及时间
获取到时间同步服务器时发送来的数据时,进行解析,然后转换为指定的格式输出,然后在用linux设置时间的命令来设置系统时间即可。关键代码如下:
然后用web服务的模拟代码来充当用户提供的时间校正服务器来测试:
当收到获取时间戳的请求时,获取当前时间戳发送给请求的客户端,也就是要校正系统时间的qt程序
到这里还没有完成,得把程序设置为开机自启。
直接写bash的命令,设置为开机自启动,server模式这种设置的程序启动,是以root权限启动的,可以修改系统时间
#! /bin/sh
#获取当前所在目录路径
WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
#进程名字可修改
PRO_NAME=/etc/systemd/system/checkSystemTime.service
sudo touch ${PRO_NAME}
sudo chmod 777 ${PRO_NAME}
echo '
[Unit]
Description=checkDateTimeServer
After=network.target
[Service]
Type=simple
ExecStart='${WORK_PATH}'/checkSystemTime
[Install]
WantedBy=multi-user.target
' > ${PRO_NAME}
sudo systemctl enable checkSystemTime.service
sudo systemctl start checkSystemTime.service # 启动checkSystemTime
sudo systemctl status checkSystemTime.service # 查看checkSystemTime状态
sudo systemctl disable checkSystemTime.service # 停用checkSystemTime,下次开机不在启动