LoginSignup
25
33

More than 1 year has passed since last update.

1台のサーバーで学習を回す時はnohup,screen,tmuxを使おう

Last updated at Posted at 2017-02-23

この記事は1台のサーバーで回す時の話。5台とか使う様になるといちいちサーバー入ってdocker入って作業して抜けるというアホらしいことをすることになる。その辺は後々自動化していきた。

サーバーで学習を回すと数時間から数日コンソールでログが流れる。
その間パソコンを切れないのは嫌だからコマンドをいちいち作ってた。
ただnohup,screen,tmuxってのがあるらしく他の記事にも書いたのだが便利なので再度メモ。
どれかを使えばいい。

nohupを使う

サーバー側で学習をさせる場合はnohupを使うとバックグラウンドで動いてくれるので便利
nohupはターミナルの接続が切れた場合にハングアップシグナル(SIGHUP, HUP)という強制終了の命令を無視する。
こんな感じで書く。

nohup sh run_minist.sh &

nohupの例

nohup ping 8.8.8.8 &
jobs
fg %1
cat nohup.out #ログが見れるが数個一気に学習してた場合は全部合算されるので> log.txtなどして物理で出してもいい。

nohupが終わったらメールする

(cmd="python train.py";nohup $cmd && (echo $cmd | mail mail@domain.sample -s "Job finish") > ./cmd &)

nohupが終わったらメールしてshut down
gcpなどクラウドで動かしてる場合、一旦閉じちゃう。

(cmd="python train.py";nohup $cmd && (echo $cmd | mail mail@domain.sample -s "Job finish" | sudo poweroff ) > ./cmd &)

おわった時にslack通知してサーバー閉じる

[10分で出来る]シェルスクリプトの結果をslackに投稿
https://qiita.com/tt2004d/items/50d79d1569c0ace118d6

こいつを使って

postSlack.sh
#!/bin/sh                                                                                                                              

# postSlack.sh [チャンネル] [Bot名] [本文]                                                                                             

WEBHOOKURL="https://hooks.slack.com/services/hogehoge/hogehoge/hogehoge"

DATA_PAYLOAD=`cat <<_EOT_                                                                                                              
payload={ \                                                                                                                            
    "channel": "$1", \                                                                                                                 
    "username": "$2", \                                                                                                                
    "text": "$3" \                                                                                                                     
}                                                                                                                                      
_EOT_`

curl -s -S -X POST --data-urlencode "${DATA_PAYLOAD}" "${WEBHOOKURL}" > /dev/null
(cmd1="python train.py";cmd2="/home/hogehoge/postSlack.sh slcak_channel_name user1 "train.pyを400エポックの学習おわたー””; nohup $cmd1 && $cmd2 &)

screen

ウインドウを仮想で立てれるので、そいつがバックグラウンドで動く。
http://meideru.com/archives/1373
https://gendosu.jp/archives/2417

新しいscreenを作る

screen

スクリーンを離れる

ctrl + a , d

screenの状態を確認する

screen -ls

アタッチ

screen -r

tmuxを使う

http://qiita.com/vintersnow/items/be4b29652ff665c45198
http://qiita.com/zwirky/items/adbf22abad7d7822456b

brew install tmux

セッションは名前付きで作成しよう。後からなんの学習だったのかわからなくなるよ。

tmux new -s <session-name>

セッションの確認

tmux ls

上下にペイン(画面)を分割

Ctrl-b "

左右にペイン(画面)を分割

Ctrl-b %

セッションにアタッチする

tmux attach -t セッション番号

デタッチ

Ctrl-b d    

コマンドを作る方法

ラズビアンではsystemctlを使ってたのだが、ubuntu14.4ではsystemctlが存在しない。
ubuntu14.10付近からsystemctlに変更されたようだ。それまではupstartを使えとのこと。

ubuntuでデーモンサービス作成には気をつけろ
サーバーでサービス作成をミスすると。。。
OSがぶっこわれたりします。
さくらのサーバーでサービスの設定中で
initctl reload-configurationで反映した瞬間にsudoが使えなくなり
No such file or directorygがでるようになる。理由はbashをプロセスで使ってしまっているから。
sudo: no tty present and no askpass program specified
再起動するとどこのポートもひらいてなくpingが通らない 事態に。。。
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
nmapしても何もでないし、pingも通らないということで再インストール。
他の方法はなかったものか。
サービス作成するときは
仮想環境で1回試すのが安全かと思いました。
環境作成方法
http://qiita.com/miyamotok0105/items/0549316c8ade101ed894

Upstartとは

Upstartは/ boot / initデーモンのイベントベースの置き換えで、ブート中のタスクやサービスの開始、シャットダウン時のタスクの停止、システムの実行中の監視を行います。 もともとはUbuntuディストリビューションのために開発されましたが、昔ながらのSystem-V initの代わりにすべてのLinuxディストリビューションに展開するのに適しています。

systemdとは

systemdは、Linuxシステム用の基本ビルディングブロックスイートです。これは、PID 1として実行され、システムの残りの部分を起動するシステムおよびサービス・マネージャーを提供します。

コマンド作成はこっち
http://qiita.com/DQNEO/items/0b5d0bc5d3cf407cb7ff

参考

http://upstart.ubuntu.com/getting-started.html
http://kotaroito.hatenablog.com/entry/2015/06/20/100240
http://qiita.com/kuni-nakaji/items/f3426bf69be947c594c4
https://heartbeats.jp/hbblog/2013/02/upstart-daemon.html

25
33
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
33