我有一个需要 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 会终止。毕竟,服务是在后台运行的,对吧?