我正在编写一个ksh脚本,其中我想在后台启动weblogic服务器并立即返回到底层脚本(继续执行脚本),如下所示:
nohup path_to_domain_bin/startWebLogic.sh>/dev/null < /dev/null 2>&1
但我的脚本在 nohup 命令后挂起,执行我想要的操作的正确方法是什么?
请注意,我想摆脱 nohup.out。
我在 AIX 7.1 上运行它
答案1
将命令作为后台任务启动,&
最后:
nohup path_to_domain_bin/startWebLogic.sh>/dev/null < /dev/null 2>&1 &
正如您所注意到的,输出重定向并没有多大帮助,因为nohup
无论如何都会重定向输出。要摆脱这个问题,请跳过nohup
并在脚本中执行它所做的事情(而不是它的基本部分):
trap "" 1 # catch hangup signal
path_to_domain_bin/startWebLogic.sh>/dev/null < /dev/null 2>&1 &
但我对完全丢弃调用程序可能给你的信息有一种不安的感觉。这样,如果调用的路径名错误,您甚至不会收到错误!
我通常将此类输出附加到日志文件中,包括一些附加信息,如下所示:
(
LOGFILE=/var/log/weblogic_start.log
trap "" 1 # catch hangup signal
exec 1>> $LOGFILE # redirect output a bit more readably
exec 2>> $LOGFILE
exec < /dev/null
path_to_domain_bin/startWebLogic.sh &
date "+%Y%m%d:%H%M%S weblogic started with PID $!"
)
重定向exec
更具可读性,这在 IMO 脚本中得到了回报;此外,date
呼叫也会被重定向。在子 shell 中运行此命令(...)
可确保重定向的效果保留在脚本的这一部分。