developppのblog

木下やま人の技術メモ

2015年11月

シェルの書き方
#!/bin/sh
または
#!/usr/bin/sh

必ずシェルの1行目に記述する。
「#!」以後に書かれたプログラムでスクリプトを実行するという意味です。

シェルの実行
chmod u+x shell.sh

シェルを実行するには、ファイルに実行権限を付与する必要があります。
./shell.sh

シェルの実行。環境変数「$PATH」に「.」を記述していない場合は、ファイル名の前に「./」を記述する必要があります。

処理時間の長いジョブを実行中のときnohupをなしだと途中で終了してしまう恐れがあるため放置できないかと思います。
ジョブ実行後にバックグランドにする方法です。

コマンド
1../shell.sh

 ジョブ実行
2. Ctrl+z

 中断
3.jobs

 ジョブの確認
4.disown

  ログアウトしても実行されるようにする続きを読む

シェルスクリプトなどを実行中にSSH接続を切断(Tera Termやputtyなど)、ターミナル エミュレータの終了、OSからログアウトをするとジョブが死んでしまいます。

バックグラウンド ジョブを起動したプロセス(ログイン シェル)が子プロセスである該当のバックグラウンドジョブをハングアップ シグナル( HUP )によって終了させるためです。

シェルスクリプトを起動した親プロセスは子プロセスの終了状態を監視しています。
なのでログアウトして親プロセスであるシェルが終了すると子プロセスはゾンビ プロセスとなってしまうため親プロセスとなるシェル(ログインシェル)は子プロセスであるバックグラウンド ジョブを kill ( kill -HUP ) するのです。

コマンド
nohup コマンド &



1.オプションなし
nohup ./shell.sh &


shell.sh の標準出力、標準エラー出力に送られたデータはプログラムを実行したディレクトリに nohup.out というファイル名で保存される。
プログラムを実行したディレクトリに書き込み権限が無ければ $HOME/nohup.out に保存される。

2.標準出力先の指定
nohup ./shell.sh > out.log &


shell.sh の標準出力が out.log になる。
標準エラー出力は nohup.out で保存先は例1と同様にプログラムを実行したディレクトリか $HOME になる。

3.標準エラー出力先を指定する
nohup ./shell.sh > out.log 2> err.log &

shell.sh の標準出力が out.log になる。
標準エラー出力は err.log となる。
続きを読む

↑このページのトップヘ