複数のシステム装置が停止した場合

複数のシステム装置が停止した場合

特定のシステムデバイスのリストが停止したら、コンピュータをシャットダウンしようとします。

背景は、Google CloudとAWS EC2にコンピューティングファームがあり、各インスタンスが多数のタスクを実行し、完了すると終了する複数のサービスを開始することです。これはクラウドインスタンスであり、費用がかかるため、これ以上作業を行わない場合は、インスタンスを終了する必要があります。

私が見たほとんどの提案は、ExecStopPost=/sbin/init 0システム単位ファイル(または同様のもの)に配置することに関連しています。ただし、インスタンスを閉じることはできません。みんなこのユニットは完了しました。個々の作業単位を含むセルを作成し、targetすべてStopWhenUnneeded=trueの作業単位が停止したら、ターゲットも停止するようにセルを配置するのは簡単です。ただし、これを使用してシャットダウンをトリガーする方法はありません(例:呼び出しsystemd-halt.service)。

したがって、質問は次のようになります。デバイスリストまたはターゲットデバイスが停止した後にシステムをシャットダウンするにはどうすればよいですか?

ベストアンサー1

いくつかの実験の終わりに私が思いついた実行可能で完全に醜くない解決策は、targetラッパーデバイスを使用するというアイデアでしたが、serviceシャットダウン時にシステムをシャットダウンする方法を使用することでした。

たとえば、ワーカーサービスは次のとおりです。

# [email protected]
[Unit]
BindsTo=master.service
After=master.service

[Service]
ExecStart=/bin/myworker

[Install]
WantedBy=master.service

それからラッパーの場合:

# master.service
[Unit]
StopWhenUnneeded=true

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/sbin/init 0

systemctl start master.serviceその後、すべてのワーカーを起動でき(systemctl enable処理後)、すべて終了したらmaster.service停止して実行しますinit 0
systemctl stop master.serviceワーカーにも停止信号が表示されますが、実行前に待機しますinit 0

醜い部分は/bin/true。停止時にシステムをシャットダウンする既存のシステムデバイスがあれば、より良いですが、少なくとも機能することはできます。

おすすめ記事