启动脚本会导致引导过程挂起

时间:2016-01-07 22:50:02

标签: bash

任何人都可以告诉我如何正确终止此脚本,以便它不会挂起启动过程吗?目前它在网络发布后不久就挂起了。开发此脚本是为了控制iperf命令,就像使用systemd的任何其他典型服务一样。该文件放在/etc/rc.d/init.d/中。我的系统是RHEL 6.7,其默认运行级别为3.通过屏幕上显示的内容,它似乎在启动守护程序后立即挂起。但是在启动时运行的情况下,我只需要在运行“start”命令后退出。

#!/bin/bash

# chkconfig: - 50 50
# description: iperf

DAEMON=/usr/bin/iperf
INFO=$(pidof /usr/bin/iperf)
IS_RUNNING=$(netstat -anp | grep ":5001" | grep "iperf" | awk '{print $7}' | cut -d"/" -f 2)

case "$1" in
      start)
              $DAEMON -s -D
              ;;
      stop)
              pidof $DAEMON | xargs kill -9
              ;;
      status)

      if [ "$IS_RUNNING" = iperf ];
             then
                echo $DAEMON pid $INFO is running!!!
             else
                echo $DAEMON is NOT running!!!
              fi
              ;;
      restart)
              $DAEMON stop
              $DAEMON start
              ;;
      *)
              echo "Usage: $0 {start|stop|status|restart}"
              exit 1
              ;;
esac
exit

以下是我对脚本的建议更改,以获取我想要的行为。

添加变量:

S1=$(echo $?)

然后在start节下,修改如下:

start)
              $DAEMON -s -D
              if [ "$S1" = 0 ];
              then
                 exit 0
              else
                 exit 2
              fi

这会有用吗?

更新:

我现在已经让它在启动时没有挂起工作了。我改变了这个:

$DAEMON -s -D

到此:

nohup $DAEMON -s -D &>/dev/null &
然而,这确实带来了不必要的副作用。在启动时我不再看到它向下滚动屏幕,它完全隐藏。当我发出“服务iperf启动”时启动它会隐藏输出并直接返回提示。而在它返回提示之前它会向我显示几行输出。但是我对结果感到满意,因为我一直在研究这个问题太久了。

0 个答案:

没有答案