2013-03-14 10 views
6

Próbuję utworzyć szablon dla skryptów usług start i stop. Sprawdzałem szablon dla tomcat uruchamiania i zatrzymywania się i zobacz polecenie RETVAL=$?.Co oznacza RETVAL?

Co to oznacza? Czy powinienem to zatrzymać? Przy okazji, mój scenariusz jest poniżej, na wypadek, gdybyście chcieli to zobaczyć.

#!/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, [email protected]<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 
+1

Ponieważ nikt nie wspomniał o tym, "RETVAL" jest skrótem od 'RETurn VALUE'. Znajomość etymologii * nix słów kluczowych pomaga mi je zapamiętać. – NobleUplift

Odpowiedz

19

$? podaje status ostatniego wykonanego polecenia. W twoim przypadku ostatnie polecenie zostało wykonane: action..... Status wyjścia tego polecenia będzie obecny w $?, który później zostanie przechwycony w zmiennej RETVAL. Jeśli polecenie się powiedzie, $? będzie zawierać 0, w przeciwnym razie będzie to wartość inna niż zero.

+2

Jedna rzecz, którą należy podkreślić: '$?' Jest zastępowane po każdym poleceniu, więc jeśli chcesz zapamiętać status dla konkretnego polecenia, musisz przypisać jego wartość do innej zmiennej (np. 'RETVAL') natychmiast po wykonaniu polecenia. – chepner

3

RETVAL jest zmienną. $? przypisuje status ostatniej wykonanej komendy do zmiennej RETVAL.

2

Zgodnie z innymi informacjami $? to kod zakończenia ostatniego polecenia.

Teraz chodzi o Twoje pytanie ...

RETVAL nie jest używany nigdzie indziej w skrypcie, ale pamiętaj, że w bash, zmienne regularne są globalne, więc mogą być wykorzystywane przez inne funkcje. Jak widać, istnieje połączenie success, które może z niego korzystać. W dystrybucji sprawdziłem, czy/etc/init.d/functions nie używa tej zmiennej, więc linia jest po prostu szumem i może zostać usunięta. Sprawdź, czy twój rozkład, aby zobaczyć, co robi.