バックグラウンドで作業させる

Linuxにはバックグラウンドでコマンドを実行するためのコマンド(?)があります。
今でこそ、コンソール(telnetなど)をいくつも開いて作業をやる・・・という、
方法が主流になっていますが、昔はクライアントが貧弱でいくつもウィンドウを開けない・・・
ということがあったそうです。

まぁ、私も知らないような昔話は置いといて・・・
このバックグラウンドの作業、実は便利です。
特に、実行速度の遅い玄箱に作業(特にコンパイルなど)をさせると数時間は余裕でかかる作業・・・
なんてのは、かなりあります。
そんなときは、玄箱に作業を任せて母艦(メインPC)は電源を切って寝ちゃいましょう。
(遊びに行ってもいいんですが・・・)

また、KNOPPIXなどのisoファイル(サイズの大きいファイル)をダウンロードするときも、
wgetと併用すれば、
外出先でダウンロード実行>家に着いたらCD-RW(DVD+-RW)に焼いて、すぐ使う
なんて、こともできます。

なんだかんだ言ってもやっぱりコンパイルのときでしょうけども・・・使うのは。
「KNOPPIX」
CDまたはDVDだけで実行可能なLinuxです。
これ、Winが動かなくなったときとか、玄箱で設定ミスをしちゃったときなどに使えるんです。
NTFSもFATもetc3も・・・ほとんどのフォーマット形式に対応していて、Winとはまったく関係なく動作するから。
PCがCDブート可能(いまどきのPCならBIOSの設定を弄るだけでできるはず)なら起動させることが可能です。
まぁ、一部PCではおまじないとか呪文とかを使う必要があるみたいですが。。。
それは各自で調べろってことで・・・(をひ

これでサーバーを作れば一番安全なんだろうけど・・・(システムを書き換えることができないから)

やれること一覧
	・バックグラウンド動作指定nohupManpage of NOHUP[番外編]ログを取りながら作業する



バックグラウンド動作指定

一番単純な方法。
設定をミスするとひどい目を見てしまう方法。
それがバックグラウンド動作指定をする方法。

やり方(基本)
	$ command [arg...] &
		注:arg...はcommandの引数
		注:標準出力は全て画面に表示される
		  つまり、他の作業ができない
ログをとりたい場合は標準出力(1と2)を適当なファイルに出力する
	$ command [arg...] >[log.txt] 2>&1 &
何も表示させず、ログも取る必要のない場合は/dev/nullに捨てる
	$ command [arg...] >/dev/null 2>&1 &
「コンソールがとんでもないことに」
何度かやってるんですけどね。
進行状況が画面にずらずら〜っと表示されてコマンド入力がしにくくなります。
そんなときは、あせらずコンソールをもうひとつ立ち上げて、そっちから該当プロセスをkillしましょう。
まぁ、面倒なら問題のコンソールをkillしても良いんだけど・・・(を

実行ジョブ番号(バックグラウンド動作時に表示される[1]とか)を覚えていれば、
$ fg %1
 注:%1の1は実際の実行ジョブ番号を代入
でフォアグラウンド化できます(入力文字が見えなくても入力されているので冷静に)
で、Ctrl+Cで止めちゃいましょう。

nohup

バックグラウンド動作のため(?)のコマンドnohupを使った方法。

やり方(コマンドを実行するディレクトリにログファイルを作る)
	$ touch nohup.out
	$ nohup command [arg...] &
		注:実行するディレクトリ内にnohup.outがあることを確認
		注:nohup.outは必ず上書きされる
		注:nohupは自動的にバックグラウンドに移行しないため、
		  & で明示的に指定する必要がある(参考にもあるけど)
やり方(ユーザーディレクトリにログファイルを作る)
	$ nohup command [arg...] &
		注:実行するディレクトリ内にnohup.outがないことを確認
終了後の処理(nohup.outを任意のログファイル名に変更する)
	$ mv /foo/bar/nohup.out /some/where/[log.txt]
	または
	$ cp /foo/bar/nohup.out /some/where/[log.txt]
		注:パスは自分の環境に合わせて読み直すこと
「自動的にバックグラウンドに移行しない」
やっぱり忘れますよね?
&をつけないとフォアグラウンドのまま、nohupが実行されて何もできなくなります。
そんなときは、あわてず Ctrl+Z で作業を一時停止し、
$ bg
としてバックグラウンドに移行させましょう。
標準出力の変更ができないので単に & でバックグラウンド動作させた場合はダメだけどね。

[番外編]ログを取りながら作業する

フォアグラウンドでの作業中に、ログを取りながら作業したいときがある。
そんなときに使うコマンドが tee だ。
ちょっと、使い方に癖があるので(ついでだから)ここに書いておく。

やり方
	$ command [arg...] 2>&1 | tee [log.txt]
		注:基本的にログファイルは上書きされる
		注:2>&1を入力しないとエラーが記載されない
「tee」
teeのログファイルと実際の画面表示が違うときがあります。
原因は不明ですが、画面に表示されない内容が記録されていたり、表示されているはずの内容がなかったりします。

teeを使ったログは補助的な要素が強いんですかね?
真相はわかりませんが・・・


戻るなら押せ!