You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过Shell脚本启动JBOSS服务后无法返回Shell提示符求助

解决JBOSS启动脚本挂起不返回Shell提示符的问题

这个问题的核心是:你虽然用&把JBOSS进程放到后台运行,但它仍然和当前脚本的终端保持着标准输出(stdout)和标准错误(stderr)的关联,脚本会一直等待这些流的结束,所以没法返回提示符。而你直接在Shell中运行时,终端会处理这些输出的交互,按回车就能回到提示符,但脚本里没有这种机制,所以会一直挂起。

修复后的脚本示例

你需要给启动命令加上IO重定向,如果需要进程在终端关闭后也能继续运行,再配合nohup命令:

if [ $? -eq 0 ]; then
    # 把输出重定向到日志文件或/dev/null,同时用nohup脱离终端
    nohup sh /jboss-6.1.0.Final/bin/run.sh -c server1 -g app1 -u x.x.x.x -b x.x.x.x -Djboss.messaging.ServerPeerID=1 > /jboss-6.1.0.Final/logs/startup.log 2>&1 &
fi

关键配置说明

  • nohup:让进程脱离当前终端会话,即使你关闭Shell窗口,JBOSS也能继续运行,避免进程随终端退出而终止。
  • > /jboss-6.1.0.Final/logs/startup.log:将标准输出(正常日志)写入指定的日志文件,如果你不需要保留日志,可以换成> /dev/null直接丢弃。
  • 2>&1:将标准错误(错误日志)重定向到和标准输出相同的位置,确保所有输出都不会占用终端IO。
  • 最后的&:保持进程在后台运行,不阻塞当前脚本的执行。

如果不需要nohup(比如你不会关闭当前终端),至少要加上IO重定向:

if [ $? -eq 0 ]; then
    sh /jboss-6.1.0.Final/bin/run.sh -c server1 -g app1 -u x.x.x.x -b x.x.x.x -Djboss.messaging.ServerPeerID=1 > /dev/null 2>&1 &
fi

这样修改后,脚本执行完启动命令就会立即返回Shell提示符,不会再挂起。

内容的提问来源于stack exchange,提问作者Dinesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:02:40