Systemd 서비스를 영원히 실행시키는 방법("시작이 완료되지 않았습니다. 나중에 다시 시도하십시오.")

Systemd 서비스를 영원히 실행시키는 방법("시작이 완료되지 않았습니다. 나중에 다시 시도하십시오.")

systemd서비스를 만들었습니다~해야 한다영원히 실행됩니다(임베디드 컴퓨터에서 주요 작업을 수행하므로).

# /etc/systemd/system/samplerbox.service
########################################
[Unit]
Description=Starts SamplerBox

[Service]
Type=oneshot
ExecStart=/root/SamplerBox/samplerbox.sh
WorkingDirectory=/root/SamplerBox/

[Install]
WantedBy=multi-user.target

실제로는 다음과 같은 작업을 수행합니다.

# /root/SamplerBox/samplerbox.sh
################################
#!/bin/sh
python /root/SamplerBox/samplerbox.py

이 서비스를 활성화했습니다.

systemctl enable /etc/systemd/system/samplerbox.service

부팅 시 작동하고 시작됩니다.


그러나 이 서비스를 활성화했기 때문에 이 작업을 수행하면 다음이 systemd-analyze표시됩니다.

Bootup is not yet finished. Please try again later.

또한 서비스가 여전히 "활성"/시작된 것으로 간주된다는 메시지가 표시됩니다.

# systemctl status samplerbox
â samplerbox.service - Starts SamplerBox
   Loaded: loaded (/etc/systemd/system/samplerbox.service; enabled)
   Active: activating (start) since Thu 1970-01-01 00:14:01 UTC; 11min ago
 Main PID: 258 (samplerbox.sh)
   CGroup: /system.slice/samplerbox.service
           ââ258 /bin/sh /root/SamplerBox/samplerbox.sh
           ââ260 python /root/SamplerBox/samplerbox.py

서비스를 영원히 올바르게 실행하는 방법은 무엇입니까?

답변1

해결책은 간단합니다. 교체해야 합니다.

[Service]
Type=oneshot

통과

[Service]
Type=simple

이 문서상태:

Type=simple(기본값): systemd는 서비스가 즉시 시작되는 것으로 간주합니다. 프로세스가 분기되어서는 안 됩니다. 이 서비스에 대해 다른 서비스를 주문해야 하는 경우 소켓이 활성화되지 않는 한 이 유형을 사용하지 마십시오.

...

Type=oneshot: 단일 작업을 실행한 다음 종료하는 스크립트에 유용합니다. RemainAfterExit=yes를 설정하여 프로세스가 종료된 후에도 systemd가 서비스가 계속 활성 상태인 것으로 간주하도록 할 수도 있습니다.

관련 정보