我的代码:
type
如果服务仍在运行,我预计VAR的输出为“(LISTEN)”。
代码继续......
#!/bin/bash -x
. /etc/rc.d/init.d/functions
LOCKFILE=/var/lock/subsys/java
logger="/usr/bin/logger -t rc.local"
log_msg_start="Starting java Services:"
log_msg_stop="Stopping java Services:"
VAR=$(/usr/sbin/lsof -i :8080 | awk 'FNR == 2 {print $10}')
VAR2="(LISTEN)"
看起来很简单吧?
这是我运行调用时的调试输出。
stop(){
echo -n "$log_msg_stop"
cd /opt/java/bin/ ; ./java stop &>/dev/null &
sleep 10
rm -rf $LOCKFILE
if [ "$VAR" == $VAR2 ]
then echo "Still running, try again"
elif [ "$VAR" != $VAR2 ]
then echo "Service is stopped"
fi
echo
}
澄清要点:
1)这一行:
+ LOCKFILE=/var/lock/subsys/java
+ logger='/usr/bin/logger -t rc.local'
+ log_msg_start='Starting java Services:'
+ log_msg_stop='Stopping java Services:'
++ /usr/sbin/lsof -i :8080
++ awk 'FNR == 2 {print $10}'
+ VAR='(LISTEN)'
+ VAR2='(LISTEN)'
+ case "$1" in
+ stop
+ echo -n 'Stopping java Services:'
Stopping java Services:+ cd /opt/java/bin/
+ sleep 10
+ ./java stop
+ rm -rf /var/lock/subsys/java
+ '[' '(LISTEN)' == '(LISTEN)' ']'
+ echo 'Still running, try again'
Still running, try again
+ echo
+ exit 0
是一个链式命令,然后cd到文件夹然后运行./java stop。我这样做是因为它没有任何其他方式。仅供参考我以相同的方式运行它以启动功能,它工作正常。
2)脚本的停止功能部分的概念是使用第一次并不总是关闭的错误服务。因此“仍在运行,再试一次”。一旦我得到脚本的这一部分来检测正确的条件,那么我将使用while循环来保持它运行,直到它看到正确的条件。
3)我还尝试将服务的状态输出到文本文件,并grep它以使内容与之匹配。这样做对行为没有影响。
4)此服务使用以下格式运行:
cd /opt/java/bin/ ; ./java stop &>/dev/null &
FYI“java”正在替代我正在使用的实际程序。
答案 0 :(得分:0)
此外,您在尝试停止服务之前在脚本的开头设置$VAR
。这将从不看到您的stop
功能已停止服务。 - Etan Reisner