任何人都可以告诉我如何正确终止此脚本,以便它不会挂起启动过程吗?目前它在网络发布后不久就挂起了。开发此脚本是为了控制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启动”时启动它会隐藏输出并直接返回提示。而在它返回提示之前它会向我显示几行输出。但是我对结果感到满意,因为我一直在研究这个问题太久了。