Systemdが私のvetcoreサービスを終了しました:「成功的に無効になっています。」

Systemdが私のvetcoreサービスを終了しました:「成功的に無効になっています。」

そのため、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=yesExecStart=

man systemd.serviceType=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

おすすめ記事