SSHを介して長期実行バックグラウンドプロセスを開始し、すぐに切断する方法は?

SSHを介して長期実行バックグラウンドプロセスを開始し、すぐに切断する方法は?

サーバーにSSHで接続できるbashスクリプトを作成し、継続的なバックグラウンドプロセス(無制限のPythonスクリプト)を開始してからサーバーを終了したいと思います。私が試したことは次のとおりです。

ssh user@domain "python3 script.py &"

ssh user@domain "python3 script.py & exit"

ssh user@domain "nohup python3 script.py & exit"

それらのどれも仕事がありません。スクリプトは正常に起動しますが、サーバーからログアウトできず、ログイン状態が維持されます。

答え1

このnohupコマンドは、ユーザーが思うようには実行されません。ブレーク信号を無視して、ターミナルドライバが接続されたSIGHUPプロセスに送信しなくてもSTDIOの(ターミナル)接続を削除できますが、nohup独自のSTDIO接続を閉じません.エフェクトはそれを開始したプロセスに渡すため、sshdプロセスが終了してこれらの記述子が閉じるのを待ちます。

したがって、起動プロセスが提供するSTDOUTおよびSTDERRディスクリプタにも関連付けられていないことを確認する必要がありますsshd(STDINで開かれている)ファイルまたは。 SSH接続が失われても何も送信されないため、このコマンドは必ずしも必要ではありません。/dev/null/dev/nullnohupSIGHUP

この試み:

ssh user@domain "python3 script >/dev/null 2>&1 &"

答え2

ターミナルマルチプレクサをお試しください。 tmuxが良いです。私は一般的にどこにインストールする必要があるかについてアドバイスするのが好きではありませんが、tmuxはツールベルトにある場合は非常に便利なアプリケーションです。 (すでに設置されている可能性があります)

tmuxに含まれているアプリケーションを閉じ、ラップトップを取り外し、別の場所に移動して再度ログインして、tmuxでまだ実行されているセッションに再接続できます。以前のOSを使用している場合、画面は似ていますが、私はtmuxを好みます。

コマンドラインから新しいアプリケーションを起動するか、次のようにフォーマットされたアプリケーションを起動できます。

tmux 新しいセッション "command1"

tmux new-session "ping 8.8.8.8"

ただし、セッションに名前を付ける必要があるかもしれません。これで muxping と省略される新しいセッションがバックグラウンドで開始されます。 -d が分離されました。

tmux new -d -s muxping "ping 8.8.8.8"

今バックグラウンドで見せてください。

tmux ls

それに加える

tmux a

また、tmuxで画面を分割し、非常に便利な作業をたくさん行うことができます。大規模なマニュアルページを簡素化できるtmuxチートシートを含む多くのウェブサイトがあります。始めるのはとても簡単です。

関連情報