tmuxでpythonお手軽バックグラウンド実行
はじめに
Pythonスクリプトをコマンドラインで実行したりJupyter Notebookを使用している際に、パソコンがスリープしたりSSH接続が途切れてもプロセスをバックグラウンドで動かし続けたい場面がよくありますよね。Pythonでバックグラウンド実行を行う際、nohup
や&
などが使えますがtmuxを利用すると簡単に実行することができます。
tmuxとは
tmuxは、端末を分割して複数のウィンドウを開くことができるソフトウェアです。tmuxを使うことで、複数のウィンドウを開いて作業することができます。また、バックグラウンドでの実行や、SSH接続が切れても作業を継続することができます。詳しい使い方は公式ドキュメントやアニメーションで学ぶtmux入門 ~精選10機能~あたりを参考にしてください。
どんな時に使うのか
tmuxはPythonスクリプトの実行やJupyter Notebookの起動など、バックグラウンドでプロセスを実行したい際に使えます。
私の場合、研究やKaggleで機械学習モデルを学習する際によく使います。開発環境はMacBookから自宅の自作PCにSSH接続するという形ですが、モデルの学習など実行時間が長い処理を行う場合、PCがスリープしたり回線が切断されるとその処理も途中で停止してしまいます。昔はスリープさせないようにPCを開いたまま学習させていたのですが、この方法だと電池やディスプレイが消耗してしまいます。tmuxを使ってバックグラウンドで実行することで、このような問題を解決できます。
使い方
私はMacbook→自作PC(Ubuntu)→Dockerという形でSSH接続して開発しているので、以下のコマンドはすべてDocker内で実行しています。ご自身の環境に合わせて適宜変えてください。
インストール
Ubuntuを例に挙げると、以下のコマンドでtmuxをインストールできます。他のOSについては、公式ドキュメントを参照してください。
apt install tmux
セッションの開始
tmux new -s [セッション名]
コマンドで新しいセッションを開始します。例えば、hoge
という名前でセッションを開始するには以下のようにします。
tmux new -s hoge
バックグラウンド実行
セッションが開始したら、任意のコマンドを実行してバックグラウンドでの処理を開始します。
python fuga.py
Ctrl + b
と d
を順に押すことで、セッションからデタッチし、バックグラウンドで処理を続行させることができます。
備考: jupyter notebookの場合
以下の方法でjupyter notebookをバックグラウンドで実行できます。
jupyter notebook
あとは発行されたURLにアクセスすれば、jupyter notebookを利用することができます。VSCodeを使いたい場合は、SSH接続+VSCodeでのJupyterカーネルのバックグラウンド実行 for Kagglerの
2. VSCodeでURLを指定する
の手順を参考にしてください。
セッションの管理
tmuxでは、tmux ls
で現在のセッション一覧を表示し、tmux attach -t [セッション名]
で特定のセッションに再接続できます。不要になったセッションは、tmux kill-session -t [セッション名]
で終了させます。
設定ファイル
~/.tmux.confファイルを作成することで、tmuxの設定をカスタマイズできます。例えば、マウススクロールを有効にするには以下のコマンドを実行します。
echo "set -g mouse on" > ~/.tmux.conf
今回はマウススクロールを有効にしていますが、他にも様々な設定があります。詳しくは公式ドキュメントやとほほのtmux入門などを参考にしてください。
まとめ
tmuxを使うことで、SSH接続が切れたりPCがスリープしてもプロセスをバックグラウンドで継続させることができます。また、設定ファイルを用いることでさらに使いやすくなります。Pythonだけでなく他の言語やツールにも適用可能なので、ぜひ活用してみてください。
Discussion