![Linux 远程运行脚本,屏幕挂起,永远无法返回控制](https://linux22.com/image/1450574/Linux%20%E8%BF%9C%E7%A8%8B%E8%BF%90%E8%A1%8C%E8%84%9A%E6%9C%AC%EF%BC%8C%E5%B1%8F%E5%B9%95%E6%8C%82%E8%B5%B7%EF%BC%8C%E6%B0%B8%E8%BF%9C%E6%97%A0%E6%B3%95%E8%BF%94%E5%9B%9E%E6%8E%A7%E5%88%B6.png)
我在服务器上有一个脚本。如果我在本地服务器上运行它,则没有问题。
<user@server> ~ % restart_forms A
forms [A] is Restarting
<user@server> ~ %
但是,如果我从客户端(另一台 Linux 机器)远程运行它,它会像这样
<user@client> ~ % ssh server /path/restart_forms A
forms [A] is Restarting
屏幕挂起并且无法返回到控件;我每次都必须使用 ctrl+c 来终止脚本然后返回到控件。
我知道这可能与 stdin、stdout 和 stderr 有关。目前,我已尝试运行此后台
<user@client> ~ % ssh server /path/restart_forms A &
也尝试过
<user@client> ~ % ssh server /path/restart_forms A >/dev/null 2>&1 &
以上所有方法均失败并出现相同问题。(由于某些业务原因,我无法创建要运行的屏幕)
有人知道吗?谢谢
更新:当我ps -ef | grep restart_forms
在客户端尝试时,我可以看到该脚本仍在客户端中运行。它不应该是这样的。
答案1
如果您需要运行一个不会自行终止的脚本,并且想要在类似的情况下运行它,ssh
最好在screen
或tmux
会话中运行它,这样它的终端将与使用的终端分开ssh
。这样,ssh
在调用脚本后就可以自由退出,并且脚本可以继续运行任意长的时间。
为此,请执行以下操作:
ssh <user>@<host> screen -d -m restart_forms A