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 がサービスがアクティブであると見なすこともできます。