Bash 在don'内带有nohup的脚本;不能正确退出

Bash 在don'内带有nohup的脚本;不能正确退出,bash,shell,nohup,Bash,Shell,Nohup,我们有一个脚本,它使用nohup进行一些处理并在后台触发一个作业。当我们从OracleOEM(也可以是任何调度程序作业)调度此脚本时,我看到以下错误并将状态显示为failed,但脚本实际上已完成,没有问题。使用nohup启动备份地面作业时,如何正确退出脚本 Remote operation finished but process did not close its stdout/stderr 文件:test.sh 通过以这种方式执行start.sh,您允许它声明test.sh的输出文件描述符

我们有一个脚本,它使用nohup进行一些处理并在后台触发一个作业。当我们从OracleOEM(也可以是任何调度程序作业)调度此脚本时,我看到以下错误并将状态显示为failed,但脚本实际上已完成,没有问题。使用nohup启动备份地面作业时,如何正确退出脚本

Remote operation finished but process did not close its stdout/stderr
文件:test.sh
通过以这种方式执行
start.sh
,您允许它声明
test.sh
的输出文件描述符(
stdout
/
stderr
)的部分所有权。因此,当大多数bash脚本退出时,它们的文件描述符(由操作系统关闭),
test.sh
的文件描述符无法关闭,因为
start.sh
仍然拥有对它们的声明权

解决方案是不要让
start.sh
声明与
test.sh
使用的输出文件描述符相同。如果您不关心它的输出,您可以这样启动它:

nohup ./start.sh 2000 1>/dev/null 2>/dev/null &
它告诉新进程将其stdout和stderr发送到
/dev/null
。如果您确实关心它的输出,那么只需将其捕获到更有意义的地方:

nohup ./start.sh 2000 1>/path/to/stdout.txt 2>/path/to/stderr.txt &

我尝试过,但在完成作业后仍然出现相同的错误。#启动MMLE服务,$ADMIN\u SCRIPTS\u HOME/wmlke.sh start 10218$ADMIN\u SCRIPTS\u HOME/wmlke.sh start 10220$ADMIN\u SCRIPTS\u HOME/wmlke.sh start 10222 nohup$ADMIN\u SCRIPTS\u HOME/wmlke.sh start\u dispatcher 10809 1>/dev/null 2>/dev/null&您接受了我的答案。这是否意味着它最终对你有用?或者您仍然有问题吗?在将输出文件描述符添加到其他命令后,现在可以正常工作。对我来说也很有效。谢谢花了一整天的时间试图找出我远程执行的脚本挂起的原因。可能是
nohup ./start.sh 2000 1>/path/to/stdout.txt 2>/path/to/stderr.txt &