ソリューションの選択
SSH セッションを閉じた後もコマンドを実行し続けるには、次のいずれかのソリューションを選択します。
ソリューション 1: nohup および & コマンドの使用: 1 回限りの、非対話型の自動化されたスクリプトやコマンドの実行に最適です。
ソリューション 2: GNU screen の使用: デバッグが必要な場合や後で再開する必要がある可能性のある、長時間実行される対話型タスクに最適です。
ソリューション 1: nohup および & コマンドの使用
nohup コマンドを使用すると、ターミナルを閉じた後もプロセスを実行し続けることができ、& 記号はプロセスをバックグラウンドに送ります。
バックグラウンドでコマンドを実行します。
このコマンドは、出力とエラーの両方を
[your_log_file]にリダイレクトします。sudo nohup [your_command] >[your_log_file] 2>&1 &たとえば、
bash hello.shをバックグラウンドで実行し、出力を現在のディレクトリのoutput.logという名前の新しいファイルに書き込むには、次のコマンドを実行します:sudo nohup bash hello.sh > output.log 2>&1 &。コマンドの出力を表示します。
sudo tail -f [your_log_file]プロセスを終了します。
重要プロセスを終了すると、コマンドまたはタスクが終了します。注意して進めてください。
プロセス ID (PID) を見つけます。
[your_command]をステップ 1 で実行したコマンドに置き換えます。sudo ps aux | grep "[your_command]"たとえば、
sudo nohup bash hello.sh > output.log 2>&1 &を実行した場合、sudo ps aux | grep "bash hello.sh"を実行してその PID を見つけます。sudo kill [PID]コマンドを使用してプロセスを終了します。
ソリューション 2: GNU screen の使用
GNU screen をインストールします。
Alibaba Cloud Linux および CentOS の場合
sudo yum install -y screenDebian および Ubuntu の場合
sudo apt-get install -y screen
新しいセッションを作成して入ります。
[Name]はセッションのカスタム名です。screen -S [Name]たとえば、
mysessionという名前のセッションを作成するには、sudo screen -S mysessionを実行します。新しいセッションでタスクを実行します。
セッションをデタッチします。
Ctrl+A+Dを押して、現在のscreenセッションをデタッチします。セッションを再開します。
利用可能な screen セッションを一覧表示して、ターゲットセッションの PID を見つけます。
sudo screen -lsThere is a screen on: 2046.mytask (Detached) 1 Socket in /run/screen/S-root.この例では、セッション PID は
2046です。セッションを再開します。
[PID]を前のステップのセッション PID に置き換えます。sudo screen -r -d [PID]たとえば、PID が 2046 のセッションを再開するには、
sudo screen -r -d 2046を実行します。
セッションを終了します。
重要セッションを終了すると、その中で実行されているすべてのタスクとコマンドも終了します。注意して進めてください
[PID]をセッションの PID に置き換えます。sudo kill [PID]