ラップトップのバッテリーしきい値を設定するには、次のシステムサービスデバイスがあります。
[Unit]
Description=Set Battery Charge Thresholds
[Service]
Type=oneshot
ExecStart=/usr/bin/tpacpi-bat -s --start 1 30
ExecStart=/usr/bin/tpacpi-bat -s --stop 1 85
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
私が望むのは、サービスユニットが無効になったときにコマンドを実行する方法です(したがって、しきい値をデフォルト値に簡単に設定できます)。可能ですか?
ベストアンサー1
見てExecStop
ください。ExecStopPost
ExecStart= で始まるサービスを停止するコマンドを実行します。このパラメータは、上記でExecStart =について説明したのと同じスキームに従って複数のコマンドラインを使用します。この設定の使用はオプションです。このオプションで設定されたコマンドを実行した後、サービスの残りのプロセスはKillMode =設定に従って終了します(systemd.kill(5)を参照)。このオプションが指定されていない場合、サービス停止要求はKillSignal =で指定された信号を送信してプロセスを終了します。指定子と環境変数の置換をサポートします($ MAINPIDを含む、上記を参照)。
...
この設定は、完全なシャットダウンを要求するサービスと通信するコマンドに推奨されます。このオプションで指定されたコマンドを実行すると、サービスがまだ完全に開始されており、すべてのコマンドに正しく応答できると想定する必要があります。ポストクリーンアップ手順では、代わりにExecStopPost =を使用してください。
サービスが停止した後に実行する追加のコマンド。これには、ExecStop =に設定されたコマンドが使用されているか、サービスにExecStop =が定義されていないか、サービスが予期せず終了する状況が含まれます。このパラメータは、ExecStart =について説明したのと同じスキームに従う複数のコマンドラインを使用します。これらの設定の使用はオプションです。指定子と環境変数の置換をサポートします。 ExecStop =とは異なり、この設定で指定されたコマンドは、サービスが正しく開始されず、再び終了したときに呼び出されます。
この設定は、サービスが正しく開始されない場合でも実行する必要があるクリーンアップ操作にお勧めします。この設定で構成されたコマンドは、サービスが途中で開始されず、不完全に初期化されたデータが残っている場合でも実行できるはずです。この設定で指定されたコマンドが実行されると、サービスのプロセスはすでに終了しているため、そのプロセスと通信しようとしないでください。
この設定で構成されたすべてのコマンドは、$ SERVICE_RESULT、$ EXIT_CODE、および$ EXIT_STATUS環境変数に設定されているサービスの結果コード、および基本プロセスの終了コードと状態で呼び出されます。 exec(5) 詳細を参照してください。 。
どちらもサービスが停止している間にコマンドを実行するために使用できます。
2つの主な違いは次のとおりです。
ExecStop
基本プロセスの実行中は実行され、正常に実行された後にサービスが停止した場合にのみ実行されます。つまり、すべてのサービスが成功ExecStart
し、ExecStartPre
すべてのサービスConditions...
も通過する必要があります。ExecStopPost
「サービスが予期せず終了しました」と言っても実行されます。これにはエラーが含まれます。これが最大の利点は、複数のものがある場合はそのうちのExecStart
1つが成功し、もう1つが失敗した場合にExecStopPost
部分的な成功をクリーンアップするために使用できることです。