🏃‍♂️

SSHの接続が切れてもバックグラウンドでプログラムを走らせ続ける方法

2023/08/24に公開
4

SSHの接続が切れたらプログラムが止まった

AIの学習をクラウドやリモートのマシンで実行して、しばらくたってから確認したら接続が切れててプログラムを止まっていたという悲しい想いを一度はしたことがあるのではないでしょうか?(唐突なはじまり)。

そんなものかと諦めている人もひょっとしたらいるかもしれませんが、そんなことはありません。解決方法は色々あります。この問題、よく聞かれたり、困っている人に遭遇するので、メモ的に書いてみたいと思います。

ちなみに、自分が知っている代表的な解決方法でアンケートをとったら以下のような感じでした。

https://twitter.com/karaage0703/status/1686359507851694080

というわけで人気の仮想ターミナルの方法を中心に、方法を紹介してみたいと思います。仮想ターミナル全部ひとまとめにしていて恣意的だっていうご指摘はごもっともですが、ご容赦を。

基本的にはLinuxのマシンを想定していますが、Macでもだいたい使えます。Macでもたまーに使うと便利なときもあったりします(好みのレベルかもですが)。

なお、この文章でピンと来ない方は、以下の記事も参考にしてみてください(すごい詳しく書いてあります)。

https://pc.watch.impress.co.jp/docs/column/ubuntu/1536955.html

仮想ターミナルを使う方法

byobuを使う方法

個人的には一番オススメです。詳細は以下記事参照ください。

https://karaage.hatenadiary.jp/entry/2016/04/22/073000

tmuxを使う方法

ほとんど使ったことないです。なのですみませんが省略します。自分が使ったときはbyobu使ったほうが色々簡単だった記憶です。

参考記事を紹介しておきます。

https://zenn.dev/shu421/articles/b3f960809c188e

screenを使う方法

以下記事が参考になります。実行してデタッチして、必要に応じてアタッチするみたいな使い方です(適当な説明)。

https://qiita.com/hnishi/items/3190f2901f88e2594a5f

screenも、たまーに使うことが推奨されているケースがあったりするので、一応知っておくとよいかなと思います。覚えるのは必要なときに覚えればよいかなと思います。

nohupを使う方法

コマンドの頭にnohupをつけるだけで使える手軽な方法です。

https://itc.tokyo/linux/nohup-command/

手軽な分だけ、セッションを保存してくれるわけでないので、ログはファイルに書き出す必要があったり、書き出したログもリアルタイムに更新はされず、微妙に手間が必要だったりします。

https://gumfum.hatenablog.com/entry/2022/01/16/170000

nohup忘れてて、後からnohupしたいというときはdisownというコマンドもあるようです(コメントで教えていただきました)。

https://www.codereading.com/nb/ignore-sighp-with-disown.html

systemdを使う方法

コメントで指摘いただきましたが、systemdを使う方法もありますね。

systemdは、自動起動してバックグラウンドでずっと動かしっぱなしにするときに使う印象です。運用するようなときには使いどころがあるかもしれませんね。以下は参考記事です。

https://qiita.com/karaage0703/items/ed18f318a1775b28eab4

まとめ

好きにすればいいと思います!

個人的にはbyobu入れて使うのが楽だと思いますが、byobu入れれない環境のときなどは、nohupなども知っておいたほうが良いかと思います。

他にもよい方法知っている人いたら教えてください。

参考リンク

https://mickey-happygolucky.hatenablog.com/entry/2023/10/31/005434

変更履歴

  • 2024/04/23 微修正

Discussion

坦々狸坦々狸

就業時間が近づいてきたら実行中のコマンドをdisownしてターミナル閉じることがよくありますw

karaage0703karaage0703

へー、あとからnohupみたいなことできるんですね。知らなかったです。

tuna2134tuna2134

僕は、ずっと動かす必要があるなら、systemd使いますね

karaage0703karaage0703

systemdもありましたね!コマンドがちょこちょこ変わるとちょっとめんどいかもですね。やることが固定ならsystemdですね