我有一台托管 LDAP 数据库的计算机,其他计算机上的服务以该数据库的用户身份运行。由于用户帐户在本地不存在,因此当这些计算机在托管 LDAP 数据库的计算机之前启动时,服务将无法启动。
除运行 CentOS 7 的一台计算机外,所有计算机都运行 Ubuntu 14.04。是否可以使用 upstart 和 systemd 等待 LDAP 数据库可用,然后再启动某些服务?
编辑:我尝试使用 Upstart 的预启动脚本循环直到 LDAP 可用,但这不起作用。我在 Upstart 食谱中发现预启动脚本以使用“setuid”和“setgid”指定的用户和组运行。因此,预启动脚本永远不会运行,因为在 LDAP 服务在另一台计算机上运行之前,用户和组并不存在。
我也尝试指定“重生”,但这在这种情况下没有帮助。据我从 Upstart 食谱中了解到,重生仅在主脚本或可执行文件失败时才会生效。因此,该服务不会重新启动,因为该服务在运行任何脚本之前就失败了。
答案1
我假设您正在使用systemd
,因此我建议您systemd
根据需要修改服务文件。
该Restart=
标志指示服务未运行时是否应启动,具体取决于其未运行的原因。
您可以:Restart=on-failure
作为示例。这样该服务将继续尝试启动,直到成功。
如果您愿意,可以在服务启动之前使用ExecStart=
或ExecStartPre=
运行 bash 命令来确认 ldap 可用。
您可以systemd
在此处找到有关服务文件的更多信息:https://www.freedesktop.org/software/systemd/man/systemd.service.html
编辑:对于Upstart(Ubuntu)来说,标志应该与标志respawn
类似systemd
Restart=on-failure
https://wiki.ubuntu.com/SystemdForUpstartUsers