linux下【centos】nginx自動原始碼編譯安裝指令碼,以及通過service 啟動/停止/過載 nginx的服務指令碼
阿新 • • 發佈:2018-12-09
第一:指令碼為nginx原始碼編譯安裝的指令碼,可以幫助使用者自動建立系統使用者“nginx”;可以使用者自己指定安裝路徑,配置檔案路徑,執行檔案路徑等;
第二:可以配置第二個指令碼使用,通過service服務來管理nginx。
[[email protected] code]# cat nginx_auto_install.bash #!/bin/bash #mail: [email protected] #author shrekee #nginx 原始碼安裝nginx #進入指令碼後,首先儲存當前路徑 original_dir=`pwd` #定義一個輸入路徑的函式,遞迴方法實現;並且能簡單的幫助使用者判斷輸入的路勁是否有誤? function input_nginx_dir() { read -p"請輸入解壓後的nginx原始碼包路徑:比如:/usr/local/src/nginx1-14.0 :" nginx_dir cd $nginx_dir #通過cd 命令,來判斷輸入路徑是否正確,如果出錯則重新輸入。 [ $? -ne 0 ] && echo "路徑輸入錯誤,請重新輸入" && input_nginx_dir #掃描當前目錄下的檔名稱,並儲存。 list=`/bin/ls` #定義一個變數,用來儲存解壓nginx原始碼後,一般會存在的檔案 nginx_pack_names="html configure conf man" for i in $nginx_pack_names;do echo $list | grep "$i" &> /dev/null #逐一取出常用的名字,並用來和list中做比對,如果不存在,則提示使用者: if [ $? -ne 0 ]; then read -p"您輸入的目錄中並不包含$i檔案,您確定嗎?yes/no" ans1 if [ $nas1 = 'yes' -o $ans1 = 'y' ];then continue else input_nginx_dir fi fi done } cat<<EOF ******************************************** ******歡迎使用本原始碼安裝nginx的指令碼******** **需要事先下載、並解壓nginx壓縮包!!! **支援使用者自定義配置、二進位制檔案、安裝路徑 **預設建立nginx的系統使用者和使用者組,來管理nginx **需要:使用者事先配置yum源,以解決軟體依賴問題 **支援在成功安裝nginx後,自動建立service服務 **支援通過service nginx start|stop|restatr等管理nginx ********************************************* EOF read -p”是否知曉並同意以上內容?yes/no“ ans [ "$ans" = 'no' -o "$ans" = 'n' ] && echo "歡迎下次使用哦^_^..88" && exit 1 #第一步,首先解決原始碼包安裝nginx所需要的依賴“gcc pcre-devel openssl-devel zlib-devel” pack="gcc pcre-devel openssl-devel zlib-devel" yum -y install $pack #遍歷軟體是否已全部安裝成功? for i in $pack;do rpm -q $i > /dev/null [ $? -ne 0 ] && echo "未能成功安裝依賴-${i}-,請檢查您的環境" && exit 1 done #建立nginx系統使用者,無登陸許可權,無家目錄 #判斷在“/etc/passwd”否有nginx使用者,如果沒有則自動建立 #取出組使用者名稱 group_name=`cat /etc/group | cut -d':' -f1` echo $group_name |grep 'nginx' > /dev/null #判斷在/etc/group中有無nginx組使用者,沒有,則建立 if [ $? -ne 0 ];then groupadd -r nginx &>/dev/null fi #取出“/etc/passwd”中的使用者 user_name=`cat /etc/passwd | cut -d':' -f1` echo $user_name | grep 'nginx' > /dev/null #判斷在/etc/passwd中有無nginx使用者 if [ $? -ne 0 ]; then useradd -r -g nginx -s /sbin/nologin -M nginx fi #讓使用者指出解壓縮後的nginx目錄,如果目錄輸入錯誤則要求使用者一再輸入;而且具有基本的判斷功能, #即幫助使用者來判斷:使用者輸入的目錄是否就是正確的目錄 input_nginx_dir #清理使用者的編譯現場 #列印選單,包含nginx的常用安裝路徑 cat <<EOF **************************************** **************************************** **********預設安裝路徑*************** 預設使用者為nginx,預設組為nginx 預設安裝路徑:/usr/local/nginx 預設的二進位制路徑:/usr/local/nginx/sbin/nginx 預設的配置路徑: /usr/local/nginx/conf/nginx.conf 預設啟用openssl模組 **************************************** **************************************** EOF read -p“是否同意以上預設配置,yes/no” ans if [ "$ans" = 'yes' -o "$ans" = 'y' ] ;then ./configure --user=nginx --group=nginx --with-http_ssl_module if [ $? -eq 0 ];then make && make install && echo "恭喜您,安裝成功" else echo "配置失敗,請檢視錯誤資訊" exit 2 fi #建立二進位制檔案的軟連線 read -p"是否為您在/usr/local/bin下,建立二進位制檔案nginx的軟連線?yes/no" ans if [ "$ans" = 'yes' -o "$ans" = 'y' ];then ln -sv /usr/local/nginx/sbin/nginx /usr/local/bin/nginx fi #建立nginx的service服務,以方便使用者通過service快捷管理nginx 的啟動/停止等 read -p"是否為您在/etc/init.d下建立service的服務,以方便nginx啟動/停止等?yes/no" ans if [ "$ans" = 'yes' -o "$ans" = 'y' ];then cd $original_dir cp ./nginx.server /etc/init.d/nginx chomd +x /etc/init.d/nginx echo "service服務已經正確安裝,謝謝您的使用" fi else read -p"請輸入nginx的安裝路徑,預設回車,則預設為:/usr/local/nginx" nginx_install [ -z $nginx_dir ] && nginx_dir="/usr/local/nginx" read -p"請輸入二進位制安裝路徑,預設預設為:如下:/usr/local/bin/nginx" bin_dir [ -z $nginx_dir ] && bin_dir="/usr/local/bin/nginx" read -p"請輸入配置檔案路徑,預設預設為:比如:/etc/nginx.conf" conf_dir [ -z $nginx_dir ] && conf_dir="/etc/nginx.conf" ./configure --prefix=$nginx_install --user=nginx --group=nginx --with-http_ssl_module --sbin-path="$bin_dir" --conf-path="$conf_dir" if [ $? -eq 0 ];then #如果配置成功,則自動編譯和安裝 make && make install && echo "恭喜您,軟體安裝成功哦" #如果編譯或者安裝錯誤,則列印提示資訊,並退出 [ $? -ne 0 ] && echo "安裝失敗,請檢查錯誤資訊" && exit 4 else #配置失敗,則列印提示,並自動退出 echo "安裝失敗,請檢查錯誤資訊" exit 3 fi #建立二進位制檔案的軟連線 read -p"是否為您在/usr/local/bin下,建立二進位制檔案nginx的軟連線?yes/no" ans if [ "$ans" = 'yes' -o "$ans" = 'y' ];then if [ -f $bin_dir ]; then [ -e /usr/local/bin/nginx ] && echo "路徑/usr/local/bin/nginx已存在。。請檢查路徑" ln -sv $bin_dir /usr/local/bin/nginx elif [ -d $sbin_dir ]; then [ -e /usr/local/bin/nginx ] && echo "路徑/usr/local/bin/nginx已存在。。請檢查路徑" ln -sv $sbin_dir/nginx /usr/local/bin/nginx fi fi #建立nginx的service服務,以方便使用者通過service快捷管理nginx 的啟動/停止等 read -p"是否為您在/etc/init.d下建立service的服務,以方便nginx啟動/停止等?yes/no" ans if [ "$ans" = 'yes' -o "$ans" = 'y' ];then #返回原始路徑,做指令碼的遷移 cd $original_dir sed -ri "s#(^nginx=).*#\1${bin_dir}#g" nginx.server sed -ri "s#(^NGINX_CONF_FILE=).*#\1${conf_dir}#g" nginx.server #把剛剛修改完的資料落地到磁碟,並延遲一秒 sync sleep 1 cp ./nginx.server /etc/init.d/nginx chmod +x /etc/init.d/nginx echo "service服務已經正確安裝,謝謝您的使用" fi fi
以下為通過系統service服務來控制nginx 啟動/停止/過載的服務指令碼。
[[email protected] code]# cat nginx.server #!/bin/sh # # nginx - this script starts and stops the nginx daemon # # chkconfig: - 85 15 # description: NGINX is an HTTP(S) server, HTTP(S) reverse \ # proxy and IMAP/POP3 proxy server # processname: nginx # config: /usr/loca/nginx/conf/nginx.conf # config: /etc/sysconfig/nginx # pidfile: /usr/local/nginx/logs/nginx.pid ##定義兩個變數,分別儲存nginx二進位制的檔案和配置檔案路徑 nginx="/usr/loca/nginx/sbin/nginx" NGINX_CONF_FILE="/usr/local/nginx/logs/nginx.conf" start() { [ -x $nginx ] || exit 1 [ -f $NGINX_CONF_FILE ] || exit 2 echo "starting nginx..." deamon $nginx -c $NGINX_CONF_FILE retval=$? return $retval } stop() { [ -x $nginx ] || exit 3 [ -f $NGINX_CONF_FILE ] || exit 4 echo "stoping nginx..." $nginx -s quit return $? } reload() { configtest || return $? echo "reloadding nginx..." $nginx -s reload } status() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 $nginx -s status } configtest() { $nginx -t -c $NGINX_CONF_FILE } case $1 in status ) status ;; start ) start ;; stop ) stop ;; reload ) reload ;; esac