init脚本不会根据实际情况返回正确的值

时间:2016-05-26 22:26:31

标签: bash shell init

好吧,我已经弄到这么久了。我正在为应用程序创建一个init脚本,并且使用stop函数时遇到困难。它总是在我的第一个条件下匹配,并且在服务实际关闭时永远不会正确报告。

我的代码:

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”正在替代我正在使用的实际程序。

1 个答案:

答案 0 :(得分:0)

此外,您在尝试停止服务之前在脚本的开头设置$VAR。这将从不看到您的stop功能已停止服务。 - Etan Reisner