動かざることバグの如し

近づきたいよ 君の理想に

cronでnohupバックグラウンド処理を実行したい

やりたいこと

SSHでサーバーにログインして以下のようなコマンドを叩くとする。

nohup some_command &

するとnohupコマンドにより、SSHを切断してもsome_commandの処理はバックグラウンドで動き続ける。

これをcronで自動実行したい

かきかた

そのまま書くのはダメで

some_command >/dev/null 2>&1 &

と書かなければならない。

ポイントは2つあって

  • nohupはいらない
  • コマンドの後ろに >/dev/null 2>&1 が必要

なぜかって言うとcronの仕様らしく、

crontab により実行されたコマンドから出力が行われると、 cron デーモンは通常その出力結果を登録されたメールアドレス宛に配送します。 そのため、cronスクリプトがバックグラウンドで行われていても、そのプロセスがopenしているファイルディスクリプタがcloseされない限り、cronは次の処理に移行しないのです。

だそうです。とりあえずうまく行ったからいいや(

参考リンク