无法从脚本远程启动服务(sudo)并保持其运行

无法从脚本远程启动服务(sudo)并保持其运行

我有一个需要 sudo 才能启动的服务(tomcat)。我在远程服务器上的 /root/bin/test.sh 中创建了一个简单的脚本

#!/bin/sh
sudo service tomcat start
read

(该脚本还需要执行其他操作,只是为了简单起见而精简了)。当我直接在远程服务器上运行它时,断开连接后,tomcat 会启动并在服务器上继续运行。

当我远程运行它时,该过程启动(在暂停“读取”时我可以看到它),但是一旦脚本结束,它就消失了。(在暂停读取时,在本地运行此命令)

ps -ef | grep tomcat

我已经在本地计算机和远程计算机的 test.sh 脚本中的命令中尝试了 nohup、screen 和 & 的各种组合,但似乎无法使其正常工作。

ssh -t [email protected] "/root/bin/test.sh"
ssh -t [email protected] "nohup /root/bin/test.sh"
ssh -t [email protected] "nohup /root/bin/test.sh &"
ssh -t [email protected] "screen /root/bin/test.sh &"

答案1

在后台启动一个 screen 会话并在其中运行你的脚本。对我来说,这和 top 一样有效,因为它是交互式的,就像 sudo 一样。

ssh -l jaroslav  10.3.0.7 screen -dmS foobar
ssh -l jaroslav  10.3.0.7 screen -S foobar -X stuff top^M

# ^M means [return]
#ssh -l jaroslav  10.3.0.7 screen -S foobar -X stuff top
#ssh -l jaroslav  10.3.0.7 screen -S foobar -X stuff $'\015'

# to resume
ssh -t -l jaroslav 10.3.0.7 screen -r -S foobar

说实话,这是启动服务的一种倒退方式,但我不太清楚为什么当您使用 ssh -t 进入框时 tomcat 会终止。毕竟,服务是在后台运行的,对吧?

相关内容