概要
今更感はとてもありますが、リモートで作業することが増え、機械学習などの操作をリモートサーバで行うことが増えました。
理由は自分の持っているノートpcだととてもじゃないけどスペックが足りないからです。
google colab を使うのももちろんいいのですが、長い時間操作しないとタイムアウトになったり、使えるGPUの性能も限られていたりしますしね。
いつもsshした先のサーバでコマンドを打っていたのですが、浅はかながらsshした先のプロセスを生かすために、接続を保持していました。。
でもよく考えたらそんなことする必要は全くありませんでした。
やり方
まずssh 接続を簡単にする
https://qiita.com/kenmaro/items/a548a302228029c5c870
ここで詳しく解説したのですが、sshの認証を行う設定をし、~/.ssh/config
を編集しておくことで、
例えば my_remote_pc
へのssh接続が、
ssh my_remote_pc
みたいにすごく手軽にssh接続できるようになります。
プロセスのバックグラウンド実行
また、ローカルでコマンドをバックグラウンドすることはやったことのある人も多いかもしれません。
例えば、python main.py
をバックグラウンド実行したい時は、コマンドの最後に&
をただつけるだけです。
python main.py &
上2つを同時にやる
上2つを混ぜると、sshした先のサーバーでバックグラウンド実行できます。これで、ssh接続を切ったとしても、プロセスはリモートサーバ上で回ってくれます。
やりかたは簡単で、ssh <***> "<***> &"
です。さっきの例で行くと、
ssh my_remote_pc "python main.py &"
これだけです。
これで、わざわざssh接続を確認しながら、プロセスが回っているかどうかチェックする必要なくなりましたね。
こんなの当たり前と思う人が大半だと思いますが、自分のようになぜか不自由なやりかたで無駄なことをしていた人ももしかしたらいるはずなので、参考になれば幸いです。
追記
screen コマンドを使う
このほうがとてもやりやすかったです。
覚えるコマンドも3つくらいで大丈夫です。
screen
でまず仮想的なターミナル(セッションと呼ばれる)を作ります。
そのあと何かタスクを実行します。
ctrl-a --> d
このコマンドで作ったターミナルから離れます。(デタッチ)
screen -ls
でセッションのリストを出して、
screen -r <session id>
で繋ぎなおします。
この辺で。
おわり。