为什么我的命令不能与 nohup 和 SSH 一起使用?

问题描述 投票:0回答:2

我正在使用以下命令从本地机器重新启动服务器:

ssh -l root -p 22 $SERVER_HOST "cd $SERVER_DIR && nohup bin/restart &"

它不起作用,并且不打印任何内容,所以我不知道问题是什么。但如果我删除

nohup
&
- 它就可以工作了。为什么以及如何让它工作(并在终止 ssh 后在后台继续)?

不带 nohup 的版本可以工作,但会阻止 shell(与带 nohup 的版本不同,它还打印

bin/restart
脚本的输出)。但我无法使用它,因为我需要服务器继续在后台工作。

ssh -l root -p $SERVER_PORT $SERVER_HOST "cd $SERVER_DIR && bin/restart"

如果有关系的话,

bin/restart
脚本的内容(重新启动Ruby on Rails应用程序)

. /root/.asdf/asdf.sh
killall -r ruby
RAILS_ENV=production bundle exec rails server
bash shell unix ssh nohup
2个回答
2
投票

对我有用的是:

ssh -tt -l root -p 22 $SERVER_HOST 'cd $SERVER_DIR && nohup bin/restart & sleep 1'

使用 OpenSSH 7.2p2(客户端和服务器)、bash 4.3、Linux 4.15 进行测试。

-tt
强制 ssh 分配终端,这对于
nohup
的工作显然很重要。

sleep 1
并不特别,您只需要一些能够强制 shell 进行上下文切换的东西,它也可以是
/bin/true
,但这并不是万无一失的。


0
投票

您还可以检查: KillUserProcesses 的系统守护进程登录配置(退出时) 这会覆盖 nohup, disown a.s.o

# See logind.conf(5) for details.
[Login]
#NAutoVTs=6
#ReserveVT=6
KillUserProcesses=no
© www.soinside.com 2019 - 2024. All rights reserved.