2016年11月16日: ゴーイング 毎 上へ

【ソリューション事業部 スミダ】
なみたさん、予防接種の直前に災難でしたね。
実は私ズムスタ行ったことないんですよ
老朽化した市民球場の外野席で、タバコをスパスパ吸う大人達に囲まれて
観戦してたのが最後です。(今じゃ考えられません)
神#1かっこいいですね。
最近じゃ陽気なスイーツおじさんに変化していますが
そのギャップも面白い。また談義しましょう
さて、ブログですが
今回も空気を読まずにニッチな技術ネタでお送りします。


サーバー管理者の方々はコンソールで作業する事が多いと思うのですが
帰宅直前に処理を流して帰りたい。という事があると思います。
そんな時にクライアントPCから処理を流して、そのまま電源落とさずに帰ったものの
翌日PCがスリープに入って回線が切断されていた・・・・WindowsUpdateで強制再起動かかってた・・・orz
などなどの理由で流した処理が止まる事態を回避する為のコマンドです。
■nohup

$ nohup ./hoge.sh > /path/to/logfile &

nohupを頭につけて実行すると通常の処理(ジョブ)ではなく
1プロセスとして実行されます。
コンソールの出力とも切り離されますので、出力のリダイレクトは必ず指定します。
(※指定しなかった場合はカレントディレクトリにnohup.logが生成されます。)
こうすることでログアウトしても処理が続行されます。
■disown
既に実行中の処理をバックグラウンドで実行するパティーンです。

$ ./hoge.sh
^Z ←Ctrl+Zでsuspend
[1]+  停止                  ./hoge.sh
$ bg ←バックグラウンドジョブに変更
[1]+ ./hoge.sh &
$ jobs ←ジョブNoを確認
[1]+  実行中               ./hoge.sh &
$ disown %1 ←ジョブNoを%*の形式で指定

出力は捨てられるので諦めましょう。(※複雑なことをすれば取れるようなのですが割愛します)
■screen
コンソール上に別の仮想コンソールを立ち上げます。
※何を言っているのかわからねーと思うが、ありのまま今起こった事を話すぜ

$ screen # ←仮想コンソールを立ち上げる
$ sleep 60; echo "finish" # ←時間のかかる処理を実行
# Ctrl+a → aは押したままCtrl離してdを押す
[detached] # ←元のコンソールに戻る
$ screen -ls # ←仮想コンソールのセッション一覧を取得
There are screens on:
3691.pts-1.dev  (Detached) # ←仮想コンソールのプロセス
1 Sockets in /var/run/screen/S-admin.
$ screen -r 3691 # ←1分ほど待ってから、再度仮想コンソールに戻る(-lsで確認したプロセスIDを指定)
$ sleep 60; echo "finish"
finish # ←実行結果が表示されている

同じ部のY本さんから教えてもらいました。ありがとうございます!
■まとめ
screenコマンドはOSによっては標準で入っていない事もありますが、インストール出来る環境であれば
出力がそのまま残るscreenコマンドを使うのがベストだと思います。
nohupやdisownも状況によっては必要になる可能性があるので、使い方くらいは知っておいたほうが
幸せになれるかもしれません。
明日のブログは最近デジアラにジョインされたニューカマーです!

カテゴリー:
| 投稿者:
DAブログ | DAホールディングス(エクスショップ&ガーデンプラス)

コメント