init和控制脚本之间的区别?

时间:2015-04-15 06:14:02

标签: linux bash init

我第一次写剧本。我跟着几个例子,我有我的init脚本,然后是一个使用loop选项的控制脚本,如果自己创建一个副本并启动最终的应用程序。

我的问题是:

1。初始化脚本和控制脚本有什么区别?为什么单独实施它们会更好?

2. 为什么我需要创建控制脚本的副本来启动应用程序(循环),为什么不直接使用控制脚本呢?这样做有什么好处?

3. 我如何改进我的脚本?例如,我不知道如果直接使用kill -9是最好的选择,我已经阅读了一些反对它的评论..

我的初始化脚本非常基础:

#!/bin/bash
APPCTL="/home/app/appctl"
APPBIN="/home/app/app.cpp"

if [ ! -x "$APPCTL" -o ! -f "$APPBIN" ]; then
    echo "ERROR: app is missing or is not executable" >&2
    exit 1
fi
if [ "$1" = "stop" -o "$1" = "restart" ]; then
    echo "Stopping app"
    "$APPCTL" stop
fi
if [ "$1" = "start" -o "$1" = "restart" ]; then
    echo "Starting app"
    "$APPCTL" start
fi

我的控制脚本如下:

#!/bin/sh
APP_DIR="/home/app"
APP_CTL="$APP_DIR/appctl"
APP_BIN="$APP_DIR/app.cpp"
APPCLT_PID="/var/run/appctl.pid"
OWN_PID=$$

case "$1" in
   start)
        if [ -f "$APPCLT_PID" ]; then
            PID=$(cat "$APPCLT_PID")
        fi
        if [ "$PID" != "" ]; then
            COMM=$(ps --pid "$PID" ho comm)
            if [ "$COMM" == "appctl" ]; then
                echo "Already runnning..."
                exit 0
            fi
        fi
        "$APP_CTL" loop 2>&1 &
        ;;
   stop)
    if [ -f "$APPCLT_PID" ]; then
        PID=$(cat $APPCLT_PID)
        if [ "$PID" != "" ]; then
           kill -9 "$PID"
        fi
        rm -f "$APPCLT_PID"
    fi
    for pid in $(pgrep -f $APP_BIN); do
        kill $pid
    done
    ;;
   loop)
    echo $OWN_PID > "$APPCLT_PID"
    cd "$APP_DIR"
    while true; do
       nice -n 10 "$APP_BIN" > /dev/null 2>&1
        sleep 5
    done
    ;;
esac
exit 0

感谢。

0 个答案:

没有答案