我有一个脚本,用于ssh
登录到远程机器、cd
特定目录,然后启动一个守护进程。原始脚本如下所示:
ssh server "cd /tmp/path ; nohup java server 0</dev/null 1>server_stdout 2>server_stderr &"
这个脚本似乎工作正常。但是,当用户输入错误的路径导致cd
失败时,它并不可靠。由于 ,即使失败;
,该命令也会尝试运行该命令。nohup
cd
明显的修复不起作用:
ssh server "cd /tmp/path && nohup java server 0</dev/null 1>server_stdout 2>server_stderr &"
也就是说,SSH 命令在服务器停止之前不会返回。放在nohup
前面cd
而不是前面java
没有用。
谁能帮我解决这个问题?你能解释一下为什么这个解决方案不起作用吗?谢谢!
编辑: cbuckley 建议使用sh -c
,我从中得出:
ssh server "nohup sh -c 'cd /tmp/path && java server 0</dev/null 1>master_stdout 2>master_stderr' 2>/dev/null 1>/dev/null &"
但是,现在退出代码总是0
在cd
失败时;而如果我这样做,ssh server cd /failed/path
那么我会得到一个真正的退出代码。建议?