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가 서비스가 계속 활성 상태인 것으로 간주하도록 할 수도 있습니다.