[shell腳本]Linux自定義命令並啓用應用

前言

之前做過一個Java Web系統,由很多的子系統組成,由儘管其子系統頗多,但是要在服務器上管理這些子系統(啓動、停止、重啓等)卻很方便,只需要輸入tt 便能看見每個應用的名稱、狀態等,然後輸入對應的應用名+操作代碼,便能進行對應的操作,這一切都源於它使用了自定義的命令,來調用對應的shell腳本或命令。正好目前我做的一個系統,還處於起步階段,每次部署都太麻煩,所以就做了一個類似的功能。

實現這個功能主要有兩步:

  1. 創建相關操作的shell腳本;
  2. 自定義命令

1. 創建Shell腳本

#!/bin/bash
export APP_PATH=/usr/local/SmartDataStack
operate=${1}
#echo "${0}"
APP_NAME="sds"

pid=$(ps -aef | grep sds- | grep -v grep | awk '{print $2}')

startSDS(){

        if [ "$pid" == ""  ]; then
                echo -n "$APP_NAME starting: "

        for f in $APP_PATH/sds*.jar; do
            sudo chown root:root $f && sudo chmod 775 $f
        done

        if [ "$?" == 0 ]; then 
            sudo sh $APP_PATH/start.prod.sh                      

            if [ "$?" -eq 0 ]; then

                echo "launch done, next will copy upload directory to $APP_PATH/tmp/webapp"
                sleep 10
                sudo cp -R $APP_PATH/upload $APP_PATH/tmp/webapp
                echo -e ""
                echo "Success"
            else
                echo "failure"
            fi

        else
            echo "failure, 'chown' && 'chmod failure'"
            echo -e ""
            exit 1
        fi

    else 
        echo "can't start SDS: SDS is running."
        echo -e ""
        exit 1       
        fi
}

stopSDS() {

    if [ "$pid" == "" ]; then
        echo "can't stop SDS: SDS is not running."
        echo -e ""
        exit 1
    fi

    echo -n "$APP_NAME stoping[pid: $pid]: "   

    # first copy upload dir
    sudo cp -R $APP_PATH/tmp/webapp $APP_PATH/upload && sudo kill $pid  

    # sudo kill `ps -aef | grep sds- | grep -v grep | awk '{print $2}'`

    if [ "$?" == 0 ]; then 
        sleep 5
        echo "success"
    else
        echo "failure"
        echo  -e ""
        exit 1
    fi
}

restartSDS() {

    echo "$APP_NAME restart..."
    # stopSDS
        # startSDS
    $0 stop
    $0 start
}

statusSDS() {

    #echo "------------------------------------------"
    echo "      pid status  "
    echo "------------------------------"   

    if [ "$pid" == "" ]; then
        echo "$APP_NAME	$pid  stoped"
    else
        echo "$APP_NAME	$pid  started"
    fi


}

echo -e ""

case "$operate" in
    start)
        startSDS
        ;;
    stop)
        stopSDS
        ;;
    reload|restart)
        restartSDS
        ;;
    status)
        statusSDS
        ;;
    *)
        echo -e "Usage params: start|stop|status|restart|reload"
        ;;
esac        

echo -e ""

exit 0

2. 配置別名(alias)

別名的配置可以分爲兩種,一種是隻對自己生效,一種是對所有用戶生效。

1.) 配置只對自己生效的別名

(1) 編輯~/.bashrc文件

sudo vim ~/.bashrc 

(2) 加入內容

alias sds="/usr/local/sh/sds.sh"

(3) 使配置生效

source ~/.bashrc

這時候使用sds即可查看效果,如下:

$ sds

Usage params: start|stop|status|restart|reload

$ sds status

                pid     status
------------------------------
sds             24019   started

如果顯示沒有此命令的話,查看是否有~/.bash_profile 文件,這個文件會加載~/.bashrc 文件,源碼如下:

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:/root/bin:/sbin:/usr/sbin:/usr/script

export PATH

2.) 設置全局別名,對所有用戶生效

上面的配置只能對當前用戶有效,如果需要讓所有的用戶都能使用此別名,則需要使用下面的方法。

(1) 在/etc/profile.d 目錄下新建文件(文件名自定義),例:

sudo vim /etc/profile.d/custom-aliases.sh

(2) 輸入別名配置,例:

alias sds="/usr/local/sh/sds.sh"

(3) 保存文件

(4) 重新打開任何的terminals都可以使用這個別名了

$ sds

Usage params: start|stop|status|restart|reload

$ sds status

                pid     status
------------------------------
sds             24019   started

Enjoy!

參考資料

http://askubuntu.com/questions/610052/how-can-i-preset-aliases-for-all-users

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章