总结
如何让 systemd 单元依赖来自另一台主机的网络服务?
问题
我的 sambaserver 上的 samba 服务无法启动,因为该主机的启动速度比 dns2.ipa.example.com 更快。
[root@sambaserver|/root]# systemctl status smb -l
● smb.service - Samba SMB Daemon
Loaded: loaded (/usr/lib/systemd/system/smb.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Tue 2017-10-03 22:27:35 EDT; 2 days ago
Process: 1752 ExecStart=/usr/sbin/smbd $SMBDOPTIONS (code=exited, status=1/FAILURE)
Main PID: 1752 (code=exited, status=1/FAILURE)
Status: "Starting process..."
Oct 03 22:27:35 sambaserver.ipa.example.com smbd[1752]: failed to bind to server ldaps://dns1.ipa.example.com ldaps://dns2.ipa.example.com with dn="[Anonymous bind]" Error: Local error
Oct 03 22:27:35 sambaserver.ipa.example.com smbd[1752]: (unknown)
Oct 03 22:27:35 sambaserver.ipa.example.com smbd[1752]: [2017/10/03 22:27:35.669369, 0, pid=1752] ipa_sam.c:4507(pdb_init_ipasam)
Oct 03 22:27:35 sambaserver.ipa.example.com smbd[1752]: Failed to get base DN.
Oct 03 22:27:35 sambaserver.ipa.example.com smbd[1752]: [2017/10/03 22:27:35.669405, 0, pid=1752] ../source3/passdb/pdb_interface.c:180(make_pdb_method_name)
Oct 03 22:27:35 sambaserver.ipa.example.com smbd[1752]: pdb backend ipasam:ldaps://dns1.ipa.example.com ldaps://dns2.ipa.example.com did not correctly init (error was NT_STATUS_UNSUCCESSFUL)
Oct 03 22:27:35 sambaserver.ipa.example.com systemd[1]: smb.service: main process exited, code=exited, status=1/FAILURE
Oct 03 22:27:35 sambaserver.ipa.example.com systemd[1]: Failed to start Samba SMB Daemon.
Oct 03 22:27:35 sambaserver.ipa.example.com systemd[1]: Unit smb.service entered failed state.
Oct 03 22:27:35 sambaserver.ipa.example.com systemd[1]: smb.service failed.
这些设备是物理的,并且很旧,因此使用这些特定的主机时,有没有办法让系统单元 smb.service 等待 ldaps://dns2.ipa.example.com 的网络服务?
我想我可以尝试编写一个包装脚本并将其放入执行开始前字符串,但是看起来并不像它应该的那样干净。
如何让我的 systemd 单元文件依赖网络上另一台主机的服务(或 systemd 单元)?
答案1
不,你不能干净利落地做到这一点。相反,在 smb.conf 中增加“ldap 连接超时=”超时,这样如果无法建立连接,samba 需要更长的时间才能失败。