systemd-timesyncd.serviceがVMWareのArchで無効になっています。

systemd-timesyncd.serviceがVMWareのArchで無効になっています。

VMWare FusionでゲストOSとして動作するArch Linuxでは、ホストOSを休止状態にして同期を再開しないと、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."

修正する:以下の答えは、VMでsystemd-timesyncd.serviceを実行する方法を説明していますが、これが時間同期の問題を解決できないことがわかりました(これはおそらくVMでsystemd-timesyncdが無効になった理由です)。アーチウィキページVMWareにアーチLinuxをインストールする実施方法を説明する時刻同期ゲストオペレーティングシステムとホストオペレーティングシステムの間。

答え1

このパラメータを設定解除するプロファイルを作成するだけです。

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」が付いたすべてのファイルは、ファイル自体が解析された後に解析されます。これは、デバイスファイルを変更せずにデバイスの構成設定を変更または追加するのに役立ちます。含まれているファイルにディレクティブの前に適切なセクションヘッダーがあることを確認してください。

答え2

systemd.unitの人々から:

ConditionVirtualization =は、システムが仮想化環境で実行されていることを確認し、オプションで特定の実装であるかどうかをテストするために使用できます。ブール値を使用して仮想化環境で実行されていることを確認するか、vmとコンテナのいずれかを使用して一般的な種類の仮想化ソリューションをテストするか、qemu、kvm、vmware、microsoft、oracle、xen、bochs、chroot、uml One、openvz、lxcを使用してください。 、lxc-libvirt、systemd-nspawnは、特定の実装をテストするために使用されます。複数の仮想化テクノロジがネストされている場合、最も内側のテクノロジのみが考慮されます。テストの前に感嘆符を付けてテストを無効にできます。

ConditionVirtualization=no はシステムに通知します。いいえこのサービスは、オペレーティングシステムが仮想化環境で実行されている場合に実行されます。私の考えでは、一部のVMが時間同期を提供するゲストOSツールを提供しているため、チェックが存在するようです。これらのツールを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

関連情報