我有一个从 SSH 运行的脚本,它启动了几个进程,当我与会话断开连接时,我希望这些进程保持打开状态。
这可行吗?在后台启动脚本不是解决方案......
更新
我的脚本启动一个具有不同类路径的 java 进程,并调用其他 4 个脚本,每个脚本都启动具有不同类路径的不同 java 进程。
答案1
如果进程在某种程度上是交互式的/不适合作为守护进程运行,那么您正在寻找类似的东西GNU 屏幕或者多路复用器- 它们都允许您启动一个包含多个窗口的会话,并分离和重新附加该会话:
tmux new-session session-1
# start an application
C-b d # C-b means Ctrl-b
# You're now back in your terminal and can disconnect from the server
# After connecting again, use
tmux attach -t session-1
# to get back to your previously created session.
屏幕的工作流程是相似的,但我不知道它在我的脑海中。
答案2
取决于“保持开放”的含义。如果你的意思是你愿意重新连接一段时间后看到输出并进行交互,那么 Wieland 已经为您提供了很好的建议。如果您只是希望它们在退出时继续运行,您可能需要尝试使用nohup
:它可能是前景或背景,并且它会起到作用。
答案3
要完成@Wieland的回答,您可以这样使用GNU Screen:
screen -S 会话名称 # 在这里开始你的应用程序 Ca d # Ca 表示 Ctrl 和“a”键。 “d”代表“分离” # 您现在回到终端并可以断开与服务器的连接 # 再次连接后,使用 screen -r 会话名称 # 返回到之前创建的会话。