#!/usr/bin/env bash for h in ${TARGET_HOSTS[@]}; do echo $h ssh $h "nohup some_command >> path/to/log 2>&1 & exit" done
![複数ホストに ssh して nohup でコマンド実行するときのテンプレート - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/e1f6182571fae063547e85d9af1fed869f0f2562/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JUU4JUE0JTg3JUU2JTk1JUIwJUUzJTgzJTlCJUUzJTgyJUI5JUUzJTgzJTg4JUUzJTgxJUFCJTIwc3NoJTIwJUUzJTgxJTk3JUUzJTgxJUE2JTIwbm9odXAlMjAlRTMlODElQTclRTMlODIlQjMlRTMlODMlOUUlRTMlODMlQjMlRTMlODMlODklRTUlQUUlOUYlRTglQTElOEMlRTMlODElOTklRTMlODIlOEIlRTMlODElQTglRTMlODElOEQlRTMlODElQUUlRTMlODMlODYlRTMlODMlQjMlRTMlODMlOTclRTMlODMlQUMlRTMlODMlQkMlRTMlODMlODgmdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZzPTI0MjA0N2UyYmM1YWFhMGNiZDZkOTg0ZjBjZjFiOTM5%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBrZXktYW1iJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1lODdhZjYyZTk2Njg5MmY0ZmVkNjk2ZWMzOWIxYmJkYQ%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3D838047e5e38b7765acadb6f8b96dcf7f)
はじめに SSH 接続で時間の掛かるシェルスクリプトをバックグラウンドで走らせて帰りたいのに、SSH 接続を切るとジョブが死んでしまいます。SSH 接続に限らず目の前の OS からログアウトしたりターミナル エミュレータを終了しても同じ現象が起こります。 この症状は正常です。なぜなら、バックグラウンド ジョブを起動したプロセス(ログイン シェル)が子プロセスである該当のバックグラウンドジョブをハングアップ シグナル( HUP )によって終了させるからです。 シェルスクリプトを起動した親プロセスは子プロセスの終了状態を監視しています。ですからログアウトして親プロセスであるシェルが終了すると子プロセスはゾンビ プロセスとなってしまうので親プロセスとなるシェル(ログインシェル)は子プロセスであるバックグラウンド ジョブを kill ( kill -HUP ) するのです。 nohup コマンド
いつまで経っても終わらないから帰れない… 途中で終了してしまうと困るので、ログアウトしても終了しないように。 作業の流れ Ctrl+Zでコマンドの中断 bgでバックグラウンドに回す jobsでジョブの確認 disownでログアウトしても実行されるようにする 実際のコマンドだと
コマンドの実行時間を計測する際によく使用されるtimeコマンドだが、これはbashの組み込みコマンドのため、外部ファイルへの書き出しができない。 こうなると、nohupなどでコマンドの実行時間をログに記録させて放置したくても、ファイルに書き出せないため放置することが難しくなる。 そんな時は、bashの組み込みコマンドとしてのtimeではなく、GNU timeを利用するといいだろう。 GNU timeは、それぞれのディストリビューションのパッケージ管理ソフトからインストールする。 Debian/Ubuntuの場合 apt-get install time RHEL系の場合 yum install time 後は、以下のようにコマンドを実行する事でコマンドの実行時間を計測、その内容をログに書き出す事ができる。 /usr/bin/time -ao 計測時間を出力するファイル 実行するコマンド [
人に教えるには自分が完全に理解していなければ、ということで調査・検証した結果。 動機 シェルからバックグラウンドで処理を行うには? nohup コマンド実行 & を使う。 コマンド実行 => Ctrl-Z => disown を使う。 定番は前者だが、両者の違いは何なのか? disownとは一体何をするのか? この機会に調べてみた。 結果のまとめ 長くなったので最初にまとめを。しかしまとめも長い。 (後自分が読む時に一番下にスクロールしたくないので…) ジョブテーブル シェルはセッションに紐づくジョブテーブルを持っている。 バックグラウンドジョブを登録している。 (フォアグラウンドジョブは未確認。ソースを読むしかないか) jobsビルトインコマンド で一覧を参照可能。 ここに見える限り、シェルのexit時にSIGHUPを送る。 この一覧にない場合、exit時にSIGHUPは送らない。 シェ
ホーム 検索 - ログイン | | ヘルプ 技術/UNIX/なぜnohupをバックグランドジョブとして起動するのが定番なのか?(擬似端末, Pseudo Terminal, SIGHUP他) [ Prev ] [ Next ] [ 技術 ] 何をいまさら当たり前の事を・・・と思われるだろう。 $ nohup long_run_batch.sh & SSHからログアウト後も実行を続けたいバッチジョブを、"&"を付けてバックグラウンドジョブとしてnohupから起動するのは定番中の定番である。 しかし、「nohupを使わなくても実行を続けることが出来る」やり方があったり、さらには「nohupを付けてもログアウト時に終了してしまう」パターンがあるとしたらどうだろう? そして、ある日あなたの後輩や同僚がこれらについてあなたに質問してきたら、あなたはどう答えるだろうか? 「Web上で検索したら見つか
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く