systemd 서비스에서 데몬 프로그램을 실행하려고 하는데 명령 프롬프트에서 수동으로(systemctl start) 또는 debian 설치의 일부로(dpkg -i myapp.deb) 스크립트를 시작하면 명령이 실행됩니다. 돌아가지 않고 실행됩니다. 명령 프롬프트로 이동합니다.
[Unit]
Description=MyDaemon
After=NetworkManager.service
[Service]
WorkingDirectory=/usr/local/bin/my-daemon
ExecStart=/usr/local/bin/my-daemon/my-daemon
Type=forking
[Install]
WantedBy=default.target
실행 중인 데몬 자체가 데몬이기 때문에 "반환"하지 않는 것을 확인할 수 있습니다. 또한 시스템을 재부팅했을 때 서비스가 데몬을 성공적으로 실행했습니다.
그러나 "systemctl start"에서 서비스를 시작할 때 서비스가 백그라운드에서 데몬을 실행하고 특히 "Type=forking"을 지정한 후에 명령 프롬프트로 돌아갈 것으로 예상했습니다. "Type=Simple"로 설정해 보았지만 결과는 같습니다.
나는 본 적이 systemd를 사용하여 데몬을 만드는 방법은 무엇입니까? 그리고시스템 서비스가 종료되지 않고 실행됩니다.하지만 이들 중 어느 것도 내 문제를 해결하지 못합니다.
누구든지 도움을 줄 수 있다면 좋을 것입니다.
감사해요.
답변1
나는 어젯밤에 이 정확한 문제를 다루었습니다. 두 가지 사항을 해결해야 합니다. selinux 정책과 환경 변수는 systemd와 로그인한 수퍼유저 간에 크게 다를 수 있으므로 명령줄에서 테스트하면 오탐지가 발생할 수 있습니다. selinux를 구현하면 차이가 엄청날 수 있습니다. 실패하는 대신 systemd는 성공(exit 0)을 기다리면서 무한정 실행을 시도합니다. 자세한 내용을 알아보려면 systemctl start my-daemon을 실행한 다음 CTL + C를 실행하여 서비스 시작을 취소한 다음 systemctl status my-daemon을 실행하세요. 상태에는 실패한 이유와 아직 종료되지 않은 이유가 확실히 표시됩니다.
또 다른 점은 [service] 섹션에서 다른 매개변수 중에서 다음을 사용한다는 것입니다.
Type=simple
RemainAfterExit=no
Type=forking이 도움이 될 수도 있습니다.