在Arch作为来宾操作系统在VMWare融合上运行时,我注意到Arch的系统时间落后于我睡觉时主机操作系统,并且永远不会同步。它显示systemd-timesyncd已加载但不活动。
[root@arch1 ~]# systemctl status systemd-timesyncd
* systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled)
Active: inactive (dead) since Tue 2014-09-30 11:04:42 PDT; 3min 7s ago
start condition failed at Tue 2014-09-30 11:04:42 PDT; 3min 7s ago
ConditionVirtualization=no was not met
Docs: man:systemd-timesyncd.service(8)
Main PID: 17582 (code=exited, status=0/SUCCESS)
Status: "Idle."
更新:下面的答案解释了如何让systemd-timesyncd.service在VM下运行,但这并不能解决时间同步问题(这可能就是systemd-timesyncd在VM下禁用的原因)。Arch页面在VMWare中安装拱门解释了如何在来宾和主机操作系统之间执行时间同步。
发布于 2014-10-01 18:14:51
只需创建一个取消设置该参数的配置文件。
mkdir -p /etc/systemd/system/systemd-timesyncd.service.d
echo -e "[Unit]\nConditionVirtualization=" > /etc/systemd/system/systemd-timesyncd.service.d/allow_virt.conf
systemctl daemon-reload
systemctl start systemd-timesyncd.service
此技术在systemd.unit手册页中进行了描述:
与单元文件foo.service一起,可能存在目录foo.service.d/。在解析完该文件后,将解析该目录中以".conf“为后缀的所有文件。这对于更改或添加配置设置到单元中非常有用,而无需修改它们的单元文件。确保所包含的文件在任何指令之前都具有适当的节头。
发布于 2014-09-30 18:24:04
来自systemd.unit man:
ConditionVirtualization=可用于检查系统是否在虚拟环境中执行,并可选择地测试它是否是特定的实现。采用布尔值检查是否在任何虚拟化环境中执行,或者使用vm和容器来测试通用类型的虚拟化解决方案,或者使用qemu、kvm、vmware、microsoft、甲骨文、xen、bochs、chroot、uml、openvz、lxc、libvirt、systemd派生来测试特定的实现。如果多个虚拟化技术是嵌套的,则只考虑最内部的技术。可以在感叹号前加上感叹号来否定测试。
如果操作系统是在虚拟环境中运行的,ConditionVirtualization=no告诉systemd不要运行该服务。我的猜测是,检查是存在的,因为有些VM提供了提供时间同步的客户操作系统工具。您可以在Arch上安装这些工具,也可以在/usr/lib/systemd/system/systemd-timesyncd.service中注释掉ConditionVirtualization=no,然后运行以下命令:
systemctl daemon-reload
systemctl restart systemd-timesyncd
现在,systemctl status systemd-timesyncd
应该显示它是活动的:
[root@arch1 ~]# systemctl status systemd-timesyncd
* systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled)
Active: active (running) since Tue 2014-09-30 11:10:12 PDT; 56s ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 17648 (systemd-timesyn)
Status: "Using Time Server 216.239.32.15:123 (time1.google.com)."
CGroup: /system.slice/systemd-timesyncd.service
`-17648 /usr/lib/systemd/systemd-timesyncd
注意,如果您还没有这样做,您还需要设置/etc/systemd/timesyncd.conf
来指向某些ntp服务器。例如:
# See timesyncd.conf(5) for details
[Time]
Servers=time1.google.com time2.google.com time3.google.com time4.google.com
https://unix.stackexchange.com/questions/158489
复制相似问题