方案选择
为防止 SSH 会话关闭导致正在运行的命令被中断,请根据需求选择以下任一方案。
方案一:使用nohup 与 &命令:适合执行一次性的、无交互的自动化脚本或命令。
方案二:使用screen工具:适合需要长时间运行、调试,或随时恢复交互操作的命令。
方案一:使用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]结束进程。
重要结束进程会结束命令或任务,请谨慎操作。
查看进程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"。使用sudo kill [进程PID]>命令结束进程。
方案二:使用 screen工具
安装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会话,此时进程在SSH客户端断开后仍可继续运行。恢复会话。
查看会话进程PID,用于后续恢复。
sudo screen -lsThere is a screen on: 2046.mytask (Detached) 1 Socket in /run/screen/S-root.示例中
screen会话进程PID为2046。恢复对后台任务的控制。
[PID]为上一步获取的PID。sudo screen -r -d [PID]以恢复会话进程PID为2046的会话为例,需执行
sudo screen -r -d 2046。
注销会话。
重要注销会话会结束在此会话中执行命令或任务,请谨慎操作。
[PID]请替换为从4.a获取的会话进程PID。sudo kill [PID]
该文章对您有帮助吗?