
항상 터미널에서 실행해야 하는 서버가 설치되어 있습니다. 명령은 다음과 같습니다
software server
이제 창을 열어두지 않고도 백그라운드에서 이 작업을 실행하고 싶습니다. 서비스를 만들어보자고 생각했어요. 내 소프트웨어 서비스는 다음과 같습니다
[Unit]
Description=Software Server
[Service]
Type=simple
ExecStart=/opt/software/bin/software server
하지만. 모든 서비스 및 가이드에서 ExecStop을 정의해야 합니다. 서버가 실제로 지원하지 않으면 어떻게 이 작업을 수행할 수 있나요? 중지 시 프로세스를 종료할 수 있나요?
문제를 해결하는 방법에 대한 제안(서비스일 필요는 없음)
답변1
https://www.freedesktop.org/software/systemd/man/systemd.service.html
관련 비트, 강조점:
실행 중지=
ExecStart=를 통해 시작된 서비스를 중지하기 위해 실행하는 명령입니다. 이 인수는 위의 ExecStart=에 대해 설명한 것과 동일한 체계에 따라 여러 명령줄을 사용합니다.이 설정의 사용은 선택 사항입니다. 이 옵션에 구성된 명령이 실행된 후에는 서비스가 중지되고 서비스에 남아 있는 모든 프로세스가 KillMode= 설정에 따라 종료됨을 의미합니다(systemd.kill(5) 참조). 이 옵션을 지정하지 않으면 서비스 중지 요청 시 KillSignal= 또는 RestartKillSignal=에 지정된 신호를 전송하여 프로세스를 종료합니다.지정자 및 환경 변수 대체가 지원됩니다($MAINPID 포함, 위 참조).
서비스 종료를 요청하기만 하고(예: 종료 신호 형식을 서비스에 전송) 서비스가 종료될 때까지 기다리지 않는 명령을 이 설정에 지정하는 것만으로는 일반적으로 충분하지 않습니다. 명령이 종료된 직후 위에서 설명한 대로 KillMode= 및 KillSignal= 또는 RestartKillSignal=에 따라 서비스의 나머지 프로세스가 종료되므로 완전히 중지되지 않을 수 있습니다. 따라서 지정된 명령은 비동기 작업이 아닌 동기 작업이어야 합니다.
그리고https://www.freedesktop.org/software/systemd/man/systemd.kill.html#우리에게 말해:
기본값은 SIGTERM입니다.
따라서 ExecStop을 지정하지 않고 systemctl stop software_server
SystemD를 실행하면 kill -15
.