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