そのため、Linuxでnetcore bashスクリプト用のsystemdファイルを作成しました。ただし、サービスファイルを起動して継続的にsystemd
終了すると、「サービス:無効」という結果が表示されます。
挿入しようとしましたが、Type=forking
どちらType=oneshot
も機能しませんでした。どうすればいいですか?
サービスファイルは次のとおりです。
[Unit]
Description=Example .NET Web API App running on Ubuntu
[Service]
Type=oneshot
ExecStart=/usr/bin/updatem
User=root
[Install]
WantedBy=multi-user.target
結果は次のとおりです。
10:57 AM kill UpdateM
10:57 AM starting UpdateM
10:57 AM 3
10:57 AM 2
10:57 AM 1
10:57 AM UpdateM (v.1.0.0.12)
10:57 AM UpdateM (v.1.0.0.12) UP.
10:57 AM Start
10:57 AM updatem.service: Deactivated successfully.
10:57 AM Finished Example .NET Web API App running on Ubuntu.
ベストアンサー1
を使用するときは、通常、そのType=oneshot
行で呼び出されたプロセスが終了した後、システムがサービスを「実行中」と見なすようにします。RemainAfterExit=yes
ExecStart=
薬man systemd.service
:Type=oneshot
サービスなしでこのオプションを使用すると、
RemainAfterExit=
サービスは「アクティブ」デバイス状態に移行せず、構成がないため、「アクティブ化」から「非アクティブ化」または「非アクティブ」に直接切り替えられます。継続的に実行する必要があるプロセス。具体的には、このタイプのサービスが実行された後(RemainAfterExit=
まだ設定されていない場合)以降に開始されたように見えず、むしろ死んでいることがわかります。
したがって、表示される動作はType=oneshot
+ noを使用して予想したものとまったく同じですRemainAfterExit=yes
。
/usr/bin/updatem
スクリプトが実際に実行し続ける必要がある子プロセスを生成する場合は、Type=forking
サービスタイプの選択は正しいことです。
ただし、/usr/bin/updatem
スクリプトが単にすでに存在する他のプロセスにコマンドを送信すると、次のような結果が発生します。それ別のものを起動してコマンドが送信されるとすぐに、スクリプトとすべての直系の子孫が消えた場合は、おそらくType=oneshot
正しいRemainAfterExit=yes
選択です。
その後、必要に応じて、ExecStop=
このスクリプトによって開始された操作を停止するために別のコマンドを送信する別のスクリプトを指す行を追加することもできます。/usr/bin/updatem
これはsystemctl stop UpdateM.service
意味のあるタスクでもあり、システムがシャットダウンしたとき(まだ実行している場合)は、systemdがタスクをよりエレガントに停止できるようにします。
サービスファイルを使用せずに変更する場合は、サービスファイルの変更を適用するためにsystemctl edit
実行する必要があることに注意してください。systemctl daemon-reload