2013-03-14 7 views
6

मैं 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, [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

चूंकि किसी और ने इसका उल्लेख नहीं किया है, 'रिटेल वाल्यू' के लिए 'रिटेल' छोटा है। * निक्स कीवर्ड की व्युत्पत्ति को जानना मुझे उनको याद रखने में मदद करता है। – NobleUplift

उत्तर

19

$? निष्पादित पिछले आदेश का दर्जा देता है। आपके मामले में, अंतिम आदेश निष्पादित action.... था। इस आदेश की निकास स्थिति $? में मौजूद होगी जिसे बाद में RETVAL चर में कैद किया गया है। यदि आदेश सफल हुआ, $? में 0 होगा, और एक गैर-शून्य मान।

+2

जोर देने के लिए एक बात: '$?' प्रत्येक कमांड के बाद अधिलेखित है, इसलिए यदि आप किसी विशेष कमांड के लिए स्थिति याद रखना चाहते हैं, तो आपको कमांड पूरा होने के तुरंत बाद अपना मान किसी अन्य चर (जैसे 'RETVAL') पर असाइन करना होगा। – chepner

3

RETVAL एक चर है। $? अंतिम निष्पादित कमांड की स्थिति को RETVAL चर में असाइन कर रहा है।

2

जैसा कि अन्य ने कहा, $? अंतिम आदेश की निकास स्थिति है।

अब, अपने प्रश्न के बारे में ...

RETVAL एक स्क्रिप्ट में और कहीं भी नहीं किया जाता है, लेकिन याद रखें, बैश में, नियमित रूप से चर वैश्विक हैं ताकि वे अन्य कार्यों के द्वारा प्रयोग किया जा सकता है। जैसा कि आप देख सकते हैं, success कॉल है जो इसका उपयोग कर सकती है। वितरण में मैंने/etc/init.d/functions इस चर का उपयोग नहीं किया है, इसलिए लाइन सिर्फ शोर है और हटाया जा सकता है .. अपने वितरण को देखने के लिए जांचें कि यह क्या करता है।

संबंधित मुद्दे