MUGIJIRU.JP

Webエンジニアの雑談ブログ

シェルスクリプトをバックグラウンド実行するnohupの紹介

Linuxにおいて、長時間にわたるバッチ処理をシェルで叩くとき、シェルのタイムアウト
ネットワーク切断による中断の憂いと対峙した経験は誰しもあると思います。


今回は、シェルをバックグラウンド実行
(=クライアントが切断されても停止しない実行)
の手法の一つを紹介します。

nohup というコマンドがあります。

使い方は簡単。いつも叩いているシェルコマンドの先頭に「nohup」とつけるだけ。

$ nohup {実行シェル}
# 例
$ nohup /usr/local/bin/php huge_batch.php

これを実行すると、nohupを叩いた時点のカレンドティレクトリに
「nohup.out」というファイルができ、ここにシェルの実行結果が書き込まれるという
超シンプルな機能です。

クライアントを切断しても実行され続けます。
(ただし、nohup中に意図的にCtrl+Cなどでnohupをキャンセルしてしまうと普通に止まるので注意)

nohup.outのファイル名、出力位置を変更したい場合は下記のように出力先を明示してやれば良いです。

$ nohup {実行コマンド} > /var/log/my_nohup_result.txt

うっかりnohupをつけずに長時間の処理を実行しちゃった時

途中からnohupに回すこともできるようです。
下記記事が参考になると思います。
http://blog.glidenote.com/blog/2013/09/26/bg-and-disown/

ぜひご活用ください。