タスクの完了後にコンピューターをシャットダウンする方法は?


25

通常、学校に行く前にダウンロードを開始します。
特定のタスクが完了した後、必要な保存を自動的に行い、コンピューターの電源を切るには、どのコマンドを使用する必要がありますか?
(更新プログラムをインストールした後、または大きなファイルをダウンロードした後に言います。)

askubuntuにもクロスポストしました

回答:


25

開始タスクに依存します。何らかのコマンドラインツールである場合は、単に実行するhaltか、またはshutdown -h now

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

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

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

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

KSシャットダウン


4
shutdown待つ時間を与えることもできます。そのためにkshutdownを使用する必要はありません。
カスカベル

1
いいえ。ただしshutdown、実際のイベントを待つ方法はありません。
シャドゥール

18

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

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

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

利点:

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

短所:

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

2
要点:これは、プロセスが開始されていても機能します。
ハイゼンベルク14

ps同じ端末でまだ開いている端末から何かを開始した場合は、CMDのPIDを見つけるのに役立ちます。プロセスが別のターミナルにあった場合、またはgrepを介してすべてのps出力をピップしてコマンドをフィルター処理すると、見つけやすくなりますps -elf | grep <command_related_word>
TafT

ベターに基づいて私の答えをチェックpgrep別名プロセスはgrep ...
ジルQuenot

このコマンドをバックグラウンドに配置するにはどうすればよいですか?
20:23のDerWeh

1
@DerWehラップそれシェルスクリプトで、ここで与えられた手順に従ってください。stackoverflow.com/q/625409/1025391
moooeeeep

3

&&and ||演算子を使用して、コマンドを連結できます。例えば:

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

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

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


3

すでに開始されているプロセスを監視する場合は、これを実行できます。

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

1

GUIを使用してそれを行うことができるsentinellaという名前のアプリケーションがあります。 センチネル

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

sudo aptitude update
sudo aptitude install sentinella
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.