我四处寻找,因为我认为这是一个相当常见的问题,但似乎没有什么对我有用。
基本上,我试图通过 SSH 连接到设备(Raspberry Pi)来运行一个进程。该进程是node ./bin/www
。我编写了一个publish.sh
脚本,它在此之前执行了一些操作,但是当我运行该命令时,ssh user@hostname "cd <my-location>;node ./bin/www
它会分别在我当前的 bash shell 中启动该进程。
我想做的是开一个新的bash shell 运行该命令,因为该过程将启动一个 Web 服务器。
我尝试将ssh
命令包装起来,但它仍然在启动脚本的bash -c 'ssh ...'
同一 shell 窗口中运行。我做错了什么吗?我到底需要在 shell 脚本中做什么才能在新的 bash shell 进程中运行命令?publish.sh
谢谢!
答案1
您可以使用ssh
with-n
选项,
ssh -Xn user@hostname <command> <argument>
可以选择使用-X
来转发 X11。对于您的情况,
ssh -n user@hostname node ./bin/www
例子:要使用以下命令在远程计算机中打开文本文件 (file.txt) gedit
,
ssh -Xn user@hostname gedit file.txt
-n A common trick is to use this to run X11 programs on a remote machine. For example,
ssh -n shadows.cs.hut.fi emacs & will start an emacs on shadows.cs.hut.fi, and the X11 connection will be
automatically forwarded over an encrypted channel. The ssh program will be put in the background.
答案2
使用 shell 执行此操作:
ssh -t master 'bash -ic "{ cd <my-location>; node ./bin/www ;} &"'
使用有点严格disown
(nohup
也可以使用):
ssh -t master 'bash -ic "{ cd <my-location>; node ./bin/www ;} & disown"'
-t
将分配一个伪 TTY 来启用作业控制bash -i
将使 shell 处于交互状态,否则与 master 的连接将被关闭
就您而言,您可以不用命令分组{}
:
ssh -t master 'bash -ic "cd <my-location>; node ./bin/www &"'