0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

遠隔サーバーに接続してコードを実行している場合、ログインしてもコードを実行し続ける方法

Last updated at Posted at 2025-04-14

※色々実験した内容をgptでまとめているので、不足内容があるかもしれないです

参考

1.これからコマンドを実行する

方法1.1:nohup コマンドを使う(Linuxサーバーの場合)

これでセッションが切れても処理は続く。

nohup python your_script.py > output.log 2>&1 &
  • your_script.py を自分のスクリプトに置き換える
  • 実行後にターミナルを閉じてもスクリプトは動き続ける
  • output.log に出力されるので、後で確認可能
tail -f path/to/output.log

を行うと、実行時の出力を確認できる。ctrl+cで抜ける。

方法1.2:tmuxscreen を使う(ターミナル多重化)

仮想的なターミナルセッションを使って、外出先からも再接続可能。

tmux の基本的な使い方:

tmux           # 新しいセッションを開始
python your_script.py   # コードを実行
Ctrl + b → d   # セッションをデタッチして戻る
  • 外出先でも tmux attach で戻れる

方法1.3:Jupyter Notebook + nohup または tmux

Jupyterで実行している場合も、サーバー側で tmux を併用するのがおすすめ

2.すでに通常のコマンドを実行している場合

方法2.1:tmuxscreen を使っていない場合

すでにターミナル上でコードを実行していて、tmuxnohup などを使っていないなら:

● 今すぐできること(Linux/Mac ターミナルの場合):

プロセスをバックグラウンドに移すセッション切断後も動作させる

  1. 実行中のコードに対して Ctrl + Z を押して一時停止(中断)
  2. 以下のコマンドでバックグラウンドに送る:
bg
  1. さらに disown を使ってシェルとの関連を切る:
disown -h %1

これでセッションが切れてもコードは動き続ける。

%1 はジョブ番号(通常は1、jobs で確認可能)

ps x | grep sleep | grep -v grep
ps aux | grep python

などでプロセスが動き続けているのかを確認できる。

方法2.2:VPNが切れる前にtmuxへ「移植」する(少し難易度高)

一度起動したプロセスを tmux に「移す」ことは原則できないが、方法はある:

  • reptyr というLinuxツールを使って、プロセスを別のセッションに引き継ぐ
    • 例:reptyr [PID]
    • ただし、インストールが必要でサーバーによっては使えない

【まとめ】

方法 セッション切断後も実行されるか 難易度
nohup + &
tmuxscreen
Ctrl + Zbgdisown
reptyr を使って移行 ◎(ただし環境依存)

今実行しているコードを止めずに出かけたい場合は、Ctrl + Zbgdisown の手順が最速で現実的

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?