LoginSignup
0
0

More than 3 years have passed since last update.

ssh した先のサーバーでタスクをバックグラウンド実行する

Last updated at Posted at 2020-06-01

概要

今更感はとてもありますが、リモートで作業することが増え、機械学習などの操作をリモートサーバで行うことが増えました。
理由は自分の持っているノート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>

で繋ぎなおします。

この辺で。

おわり。

0
0
0

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
0
0