我有一个脚本,用于ssh登录到远程机器、cd特定目录,然后启动一个守护进程。原始脚本如下所示:
ssh server "cd /tmp/path ; nohup java server 0</dev/null 1>server_stdout 2>server_stderr &"
这个脚本似乎工作正常。但是,当用户输入错误的路径导致cd失败时,它并不可靠。由于 ,即使失败;,该命令也会尝试运行该命令。nohupcd
明显的修复不起作用:
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那么我会得到一个真正的退出代码。建议?