SSHの接続が切れてもバックグラウンドでプログラムを走らせ続ける方法
SSHの接続が切れたらプログラムが止まった
AIの学習をクラウドやリモートのマシンで実行して、しばらくたってから確認したら接続が切れててプログラムを止まっていたという悲しい想いを一度はしたことがあるのではないでしょうか?(唐突なはじまり)。
そんなものかと諦めている人もひょっとしたらいるかもしれませんが、そんなことはありません。解決方法は色々あります。この問題、よく聞かれたり、困っている人に遭遇するので、メモ的に書いてみたいと思います。
ちなみに、自分が知っている代表的な解決方法でアンケートをとったら以下のような感じでした。
というわけで人気の仮想ターミナルの方法を中心に、方法を紹介してみたいと思います。仮想ターミナル全部ひとまとめにしていて恣意的だっていうご指摘はごもっともですが、ご容赦を。
基本的にはLinuxのマシンを想定していますが、Macでもだいたい使えます。Macでもたまーに使うと便利なときもあったりします(好みのレベルかもですが)。
なお、この文章でピンと来ない方は、以下の記事も参考にしてみてください(すごい詳しく書いてあります)。
仮想ターミナルを使う方法
byobuを使う方法
個人的には一番オススメです。詳細は以下記事参照ください。
tmuxを使う方法
ほとんど使ったことないです。なのですみませんが省略します。自分が使ったときはbyobu使ったほうが色々簡単だった記憶です。
参考記事を紹介しておきます。
screenを使う方法
以下記事が参考になります。実行してデタッチして、必要に応じてアタッチするみたいな使い方です(適当な説明)。
screenも、たまーに使うことが推奨されているケースがあったりするので、一応知っておくとよいかなと思います。覚えるのは必要なときに覚えればよいかなと思います。
nohupを使う方法
コマンドの頭にnohup
をつけるだけで使える手軽な方法です。
手軽な分だけ、セッションを保存してくれるわけでないので、ログはファイルに書き出す必要があったり、書き出したログもリアルタイムに更新はされず、微妙に手間が必要だったりします。
nohup忘れてて、後からnohupしたいというときはdisownというコマンドもあるようです(コメントで教えていただきました)。
systemdを使う方法
コメントで指摘いただきましたが、systemdを使う方法もありますね。
systemdは、自動起動してバックグラウンドでずっと動かしっぱなしにするときに使う印象です。運用するようなときには使いどころがあるかもしれませんね。以下は参考記事です。
まとめ
好きにすればいいと思います!
個人的にはbyobu入れて使うのが楽だと思いますが、byobu入れれない環境のときなどは、nohupなども知っておいたほうが良いかと思います。
他にもよい方法知っている人いたら教えてください。
参考リンク
変更履歴
- 2024/04/23 微修正
Discussion
就業時間が近づいてきたら実行中のコマンドをdisownしてターミナル閉じることがよくありますw
へー、あとからnohupみたいなことできるんですね。知らなかったです。
僕は、ずっと動かす必要があるなら、systemd使いますね
systemdもありましたね!コマンドがちょこちょこ変わるとちょっとめんどいかもですね。やることが固定ならsystemdですね