一 說明
case語句專門寫服務的
啟動指令碼的
二 案例
多種方式:rhel7的systemed的管理方式和rhel6的/etc/init.d的管理方式
注意:對於既沒有通過systemd管理的,並且也沒有提供可以放到/etc/init.d/下的啟動指令碼,就需要自己手動完成了!
(1)開發nginx的啟動指令碼並加入開機自啟的指令碼
需求:通過case指令碼模擬nginx服務啟動關閉
/etc/init.d/nginx
#!/bin/bash
# 開機啟動順序
# ll /etc/rc.d/rc3.d/|grep 22 -->22可以(數字越靠前,優先順序越高)-->開機和關閉的順序
# 思路:定義三個模組(函式),然後case語句呼叫模組,實現相應的功能!
#(1)判斷shell自帶的庫函式是否存在-->有則載入
[ -f /etc/init.d/functions ] && source /etc/init.d/functions
#(2)判斷程序是否開啟(nginx是否開啟)-->pid檔案-->裡面有程序號或者埠(不靠譜)
pid_file=/usr/local/lnmp/nginx/logs/nginx.pid
#(3)定義函式-->模組
#(1)開啟服務
start_nginx()
#(2)關閉服務
stop_nginx()
#(3)重啟服務
restart_nginx()
reload_nginx()
##############case語句###################
case $1 in
start)
start_nginx
retval=$?
;; stop)
stop_nginx
retval=$?
;; restart)
# 另外一中方法-->先stop,然後再start-->這裡用了系統指令碼自帶的
restart_nginx
retval=$?
;; reload)
reload_nginx
retval=$?
;; *)
# 錯誤提示
echo "usage:$0 "
exit 1
esac
exit $retval
開機啟動
chmod a+x /etc/init.d/nginx
[root@server1 init.d]# ll /etc/rc.d/rc3.d/
total 0
lrwxrwxrwx. 1 root root 20 aug 14 18:56 k50netconsole -> ../init.d/netconsole
lrwxrwxrwx. 1 root root 17 aug 14 18:56 s10network -> ../init.d/network
lrwxrwxrwx 1 root root 15 sep 2 18:57 s32nginx -> ../init.d/nginx
lrwxrwxrwx. 1 root root 15 aug 14 18:56 s97rhnsd -> ../init.d/rhnsd
# 開啟和關閉對應的數字沒有被占用即可!
chkconfig --add nginx
chkconfig --list nginx
# 開機自啟動
chkconfig nginx on
# reboot --->測試!
# 不用vim /etc/rc.d/rc.local 的方式編輯的方式!
後續
#(1)小細節
把/usr/local/lnmp/nginx/sbin/nginx命令作為乙個變數儲存,然後下面引用
#(2) 把冗餘的封裝成乙個函式-->某個名稱執行是否成功
wzj()
# 呼叫方式--->傳遞引數
wzj $1
關於chkconfig
# 7個執行級別對應的啟動指令碼! --> /etc/目錄下
drwxr-xr-x. 2 root root 77 sep 2 18:55 rc0.d
drwxr-xr-x. 2 root root 77 sep 2 18:55 rc1.d
drwxr-xr-x. 2 root root 77 sep 2 18:57 rc2.d
drwxr-xr-x. 2 root root 77 sep 2 18:57 rc3.d
drwxr-xr-x. 2 root root 77 sep 2 18:57 rc4.d
drwxr-xr-x. 2 root root 77 sep 2 18:57 rc5.d
drwxr-xr-x. 2 root root 77 sep 2 18:55 rc6.d
# 含義
等級0表示:表示關機
等級1表示:單使用者模式
等級2表示:無網路連線的多使用者命令列模式
等級3表示:有網路連線的多使用者命令列模式
等級4表示:不可用
等級5表示:帶圖形介面的多使用者模式
等級6表示:重新啟動
執行級檔案
# 每個被chkconfig管理的服務需要在對應的init.d下的指令碼加上兩行或者更多行的注釋
(1)第一行告訴chkconfig預設啟動的執行級以及啟動和停止的優先順序,如果某服務預設不在任何執行級啟動,那麼使用 – 代替執行級。
(2)第二行對服務進行描述,可以用\ 跨行注釋
# 數字越靠前,關閉越靠前!
###########################################
# 驗證:如何下次開機確定是再32開啟和62關閉
# 本質建立連線檔案
[root@server1 init.d]# ll /etc/rc3.d/ |grep 32
lrwxrwxrwx 1 root root 15 sep 2 18:57 s32nginx -> ../init.d/nginx #start
常用的命令
chkconfig --del nginx
chkconfig --list nginx # 檢視此服務的選項
chkconfig --add nginx # 加入開機管理中
chkconfig nginx off # 開機不自啟
ll /etc/rc3.d/ | grep nginx # 檢視優先順序,以及是否建立對應的軟鏈結
chkconfig nginx on # 開機自啟
service、systemctl、chkconfig
(2)mysql
要求:用函式、if語句、case語句實現mysql單例項或多例項啟動關閉指令碼的編寫!
(3)rsync--->有時間沒有
系統指令碼的研習:/etc/init.d/network
#(1)用雙引號
case "$1" in
#(2)用命令回傳碼
rc=$?
/etc/init.d/functions
應用案例
Shell中的case命令
case語句和判斷語句 if.elif.else 功能類似 當在邏輯判斷比較簡單的情況下,比後者的 量要少許多.case用法,用變數來匹配某值,如果匹配成功則執行它下面的命令,直到 為止 bin bash a 20 定義變數值 case a in 若變數在下面的某值中,則執行它下面的命令 10 值內...
shell的典型應用 shell的高亮顯示
基本格式 echo e 終端顏色 顯示的內容 結束後的顏色 例項 1 echo e e 1 66m i am handsome e 1 0m 其中 e 1 66m中的1表示設定終端顏色,如果為0則不設定終端顏色 2 echo e e 1 66m i am handsome tput sgr0 tpu...
幾個sql語句中的case使用
表結構 field type null key default extra id int 11 no pri name varchar 20 yes null char 1 yes null addr varchar 50 yes null 1.select id,name case when m ...