LDAP 데이터베이스를 호스팅하는 컴퓨터가 있고 다른 컴퓨터의 서비스는 해당 데이터베이스의 사용자로 실행됩니다. 사용자 계정이 로컬에 존재하지 않기 때문에 LDAP 데이터베이스를 호스팅하는 컴퓨터보다 먼저 해당 컴퓨터를 시작하면 서비스가 시작되지 않습니다.
CentOS 7을 실행하는 컴퓨터를 제외한 모든 컴퓨터는 Ubuntu 14.04를 실행합니다. 일부 서비스를 시작하기 전에 LDAP 데이터베이스를 사용할 수 있을 때까지 기다리기 위해 upstart 및 systemd를 사용할 수 있습니까?
편집하다: Upstart의 사전 시작 스크립트를 사용하여 LDAP를 사용할 수 있을 때까지 루프를 시도했지만 작동하지 않습니다. Upstart 레시피에서 "setuid" 및 "setgid"로 지정된 사용자 및 그룹으로 실행되는 사전 시작 스크립트를 찾았습니다. 따라서 다른 컴퓨터에서 LDAP 서비스가 실행될 때까지 사용자와 그룹이 존재하지 않기 때문에 사전 시작 스크립트는 실행되지 않습니다.
또한 "respawn"을 지정해 보았지만 이 경우에는 도움이 되지 않았습니다. Upstart 레시피에서 제가 이해한 바에 따르면 respawn은 기본 스크립트나 실행 파일이 실패한 경우에만 적용됩니다. 따라서 스크립트가 실행되기 전에 서비스가 실패하기 때문에 서비스가 다시 시작되지 않습니다.
답변1
나는 당신이 그것을 사용하고 있다고 가정하고 있으므로 필요한 경우 서비스 파일을 수정하는 systemd
것이 좋습니다 .systemd
이 Restart=
플래그는 서비스가 실행되지 않는 이유에 따라 서비스가 실행되지 않을 때 시작되어야 하는지 여부를 나타냅니다.
다음을 수행할 수 있습니다. Restart=on-failure
예를 들면 다음과 같습니다. 이렇게 하면 서비스는 성공할 때까지 계속해서 시작을 시도합니다.
ExecStart=
원하는 경우 bash 명령을 사용 하거나 실행하여 서비스가 시작되기 전에 ExecStartPre=
ldap을 사용할 수 있는지 확인할 수 있습니다 .
systemd
서비스 파일에 대한 자세한 내용은 여기에서 확인할 수 있습니다 .https://www.freedesktop.org/software/systemd/man/systemd.service.html
편집: Upstart(Ubuntu)의 경우 플래그는 플래그와 respawn
유사 해야 합니다.systemd
Restart=on-failure
https://wiki.ubuntu.com/SystemdForUpstartUsers