web-dev-qa-db-ja.com

タスクの完了後にコンピュータをシャットダウンするにはどうすればよいですか?

通常、学校に行く前にダウンロードを開始します。
特定のタスクが完了した後、必要な保存を自動的に行い、コンピューターの電源を切るには、どのコマンドを使用すればよいですか?
(たとえば、アップデートをインストールした後、または大きなファイルをダウンロードした後。)

askubunt にもクロスポストしました。

27
El Burro

開始したタスクによって異なります。コマンドラインツールの場合は、haltまたはshutdown -h nowを実行するだけです。

  1. wget http://..../somelargefile; halt-haltwgetの後に実行されます

  2. wget http://..../somelargefile && halt-haltがエラーを返さない場合、wgetが実行されます

  3. wget http://..../somelargefile || halt-haltがエラーを返した場合、wgetが実行されます

これの代わりにkshutdownを使用します-このアプリでは、実行するアクション(再起動/シャットダウン/休止状態/その他またはコマンドの実行)とタイミング(しばらくしてから、または別のアプリケーションが終了したとき)を指定できます。このツールを使用する場合は、正しいプロセスを選択する必要があります-一部の更新ユーティリティは、いくつかのサブプロセスを開始します。

KShutdown

26
pbm

すべてのプロセスには、procファイルシステム内のプロセスID(pid)に従って名前が付けられたディレクトリがあります。したがって、ディレクトリが繰り返し存在するかどうかを確認することで、特定のプロセスの終了を待つことができます。

これを使用して、次のようにプロセスの終了後にシステムのシャットダウンを実行できます(待機するpidで2296を置き換えます)。

su -c 'while [[ -d /proc/2296 ]]; do sleep 1; done; poweroff'

利点:

  • シェルコマンドをオフに設定した後にシャットダウンするかどうかを決定できます
  • シャットダウンはrootとして発行され、待機するコマンドは必ずしもrootとして実行されるわけではありません(遅いSudo- passwordプロンプトを回避する必要はありません)。

短所:

  • プロセスが終了し、OSがその秒内に新しく生成されたプロセス(競合状態)に同じpidを再利用する場合があります。したがって、その新しいプロセスが終了するのを待ち続けます。
19
moooeeeep

&&および||演算子は、コマンドをチェーンします。例えば:

apt-get update && sleep 2 && init 0

これは、aptitudeを使用してシステムの更新を実行し、2秒待ってからランレベル0に移行します。システムによっては、ハードウェアの電源が実際にオフになる場合とそうでない場合があります。

おそらくWebブラウザーなどのより任意の操作に続く1つ以上の操作と話すには、ダウンロードファイルを監視してダウンロードが実際に完了したことを確認する追加のロジックが必要ですが、シェルロジックは変更されていません。

3
Tok

すでに開始されているプロセスを監視したい場合は、 Shell でこれを行うことができます。

# while pgrep &>/dev/null -f process_name; do sleep 60; done; shutdown -h now
3
Gilles Quenot

GUIを使用して実行できる、sentinellaという名前のアプリケーションがあります。 sentinella

それをインストールするため:

Sudo aptitude update
Sudo aptitude install sentinella
1
shgnInc