Bash 竹子中SSH上的nohup命令不存在
在竹服务器中,可以设置部署计划并使用SSH任务执行命令。我有一个启动java进程的任务。我编写了以下命令来启动它,让它保持运行并从远程服务器退出:Bash 竹子中SSH上的nohup命令不存在,bash,ssh,bamboo,Bash,Ssh,Bamboo,在竹服务器中,可以设置部署计划并使用SSH任务执行命令。我有一个启动java进程的任务。我编写了以下命令来启动它,让它保持运行并从远程服务器退出: nohup java -jar project.jar 2>&1 1>/dev/null & 使用此命令,SSH任务永远不会关闭,Java进程输出由部署记录,直到我登录到远程服务器并终止该进程。因此,我查看了一个有效的旧部署计划,当更改为此计划时: nohup java -jar project.jar </dev
nohup java -jar project.jar 2>&1 1>/dev/null &
使用此命令,SSH任务永远不会关闭,Java进程输出由部署记录,直到我登录到远程服务器并终止该进程。因此,我查看了一个有效的旧部署计划,当更改为此计划时:
nohup java -jar project.jar </dev/null>/tmp/project.log 2>&1 &
进程在服务器上运行,任务按预期关闭。
有人能解释为什么第一个命令和第二个命令一样不释放吗?重定向的顺序很重要!具体来说,2>&1意味着将标准错误发送到标准输出当前所在的位置。在您的示例中:
... 2>&1 1>/dev/null ...
意味着将stderr发送到当前的stdout,即ssh会话,然后将stdout重定向到/dev/null,这样stderr将指向ssh会话
在工作示例中:
... >/tmp/project.log 2>&1 ...
意味着将stdout发送到一个文件,然后将stderr发送到stdout所指向的位置,这样两者最终都会指向该文件
工作示例也会这样做
</dev/null
确保标准输入不再连接到SSH会话;你的第一个例子没有做到这一点
总之,非工作示例将stdin和stderr都连接到SSH会话;这通常解释了ssh任务没有完成的原因。重定向的顺序很重要!具体来说,2>&1意味着将标准错误发送到标准输出当前所在的位置。在您的示例中:
... 2>&1 1>/dev/null ...
意味着将stderr发送到当前的stdout,即ssh会话,然后将stdout重定向到/dev/null,这样stderr将指向ssh会话
在工作示例中:
... >/tmp/project.log 2>&1 ...
意味着将stdout发送到一个文件,然后将stderr发送到stdout所指向的位置,这样两者最终都会指向该文件
工作示例也会这样做
</dev/null
确保标准输入不再连接到SSH会话;你的第一个例子没有做到这一点
总之,非工作示例将stdin和stderr都连接到SSH会话;这通常解释了ssh任务没有完成的原因