터미널을 닫은 후에도 소프트웨어 실행

터미널을 닫은 후에도 소프트웨어 실행

항상 터미널에서 실행해야 하는 서버가 설치되어 있습니다. 명령은 다음과 같습니다

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_serverSystemD를 실행하면 kill -15.

관련 정보