10

startおよびサービスのスクリプトのテンプレートを作成しようとしていstopます。テンプレートのtomcat開始と停止をチェックしていて、コマンドを確認しましたRETVAL=$?

これは何をしますか?私はそれを保持する必要がありますか?ところで、皆さんが見たい場合のために、私のスクリプトを以下に示します。

#!/bin/bash
#===================================================================================
#
#
FILE: <script-file-name>.sh
#
#
USAGE: <script-file-name>.sh [-d] [-l] [-oD logfile] [-h] [starting directories]
#
# DESCRIPTION: List and/or delete all stale links in directory trees.
#
The default starting directory is the current directory.
#
Don’t descend directories on other filesystems.
#
#
OPTIONS: see function ’usage’ below
# REQUIREMENTS: ---
#
BUGS: ---
#
NOTES: ---
#
AUTHOR: Valter Henrique, valter.henrique@<company>.com
#
COMPANY: <company>
#
VERSION: 1.0
#
CREATED: 03.14.13
#
REVISION: 03.14.13
#===================================================================================
#
# chkconfig: 345 90 12
# description: <service-name> start, stop, restart service
#
# Get function from functions library
. /etc/init.d/functions

folder=/<company>/<service-folder> #folder to the application
service="<service-name>" #name of the service

startup=$folder/start.sh
shutdown=$folder/stop.sh


#=== FUNCTION ================================================================
#
NAME: start
# DESCRIPTION: Start the service <service-name>
# PARAMETER 1: ---
#===============================================================================
start() {

  #----------------------------------------------------------------------
  # logging the start
  #----------------------------------------------------------------------
  initlog -c "echo -n Starting $service:"

  #----------------------------------------------------------------------
  # getting the process PID
  #----------------------------------------------------------------------    
  pid_process=`ps -ef | grep "$folder/<jar>.jar" | grep -v grep |awk -F' ' '{ print $2 }'`;

  if [ $pid_process ]; then
    echo "<service-name> is running!"
    echo "Stop then first!"
  else
    action $"Starting <service-name> service: " su - <user_deployer> -c $startup
    RETVAL=$?
  fi
  #----------------------------------------------------------------------
  # create the lock file
  #----------------------------------------------------------------------
  touch /var/lock/subsys/$service
  success $"Sucess $service startup"
  echo
}

#=== FUNCTION ================================================================
#
NAME: stop
# DESCRIPTION: Stop the service <service-name>
# PARAMETER 1: ---
#===============================================================================
stop() {
  #----------------------------------------------------------------------
  # logging the stop
  #----------------------------------------------------------------------
  initlog -c "echo -n Stopping $service: "
  killproc $service
  #----------------------------------------------------------------------
  # now, delete the lock file
  #----------------------------------------------------------------------
  rm -f /var/lock/subsys/$service
  echo
}

#----------------------------------------------------------------------
# Main Logic
#----------------------------------------------------------------------
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status $service
        ;;
  restart|reload|condrestart)
        stop
        start
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|reload|status}"
        exit 1
esac 
exit 0
4

3 に答える 3

25

$?最後に実行されたコマンドのステータスを示します。あなたの場合、最後に実行されたコマンドはでしたaction....。このコマンドの終了ステータスが表示$?され、後でRETVAL変数に取り込まれます。コマンドが成功した場合$?は0が含まれ、それ以外の場合はゼロ以外の値が含まれます。

于 2013-03-14T14:03:48.690 に答える
3

RETVALは変数です。$?最後に実行されたコマンドのステータスをRETVAL変数に割り当てています。

于 2013-03-14T14:05:45.963 に答える
2

他の人が述べたように、$?は最後のコマンドの終了ステータスです。

さて、あなたの質問について...

RETVALスクリプト内の他の場所では使用されませんが、bashでは、通常の変数はグローバルであるため、他の関数で使用できることを忘れないでください。ご覧のとおり、それをsuccess使用する可能性のある呼び出しがあります。私がチェック した分布で/etc/init.d/functionsは、この変数を使用していないため、線は単なるノイズであり、削除できます。分布をチェックして、それが何をするかを確認してください。

于 2013-03-14T14:12:54.587 に答える