運維與shell指令碼
阿新 • • 發佈:2018-11-11
運維工作內容
負載均衡GSLB
- 方式
- 輪詢
- ip
- hash:這樣的話由於hash值是一樣的,那麼伺服器可以為使用者做快取
- 權重:按照伺服器能力,權重
業務運營支援系統BOSS
- 例如:計費、結算
網際網路資料中心(IDC):機房
網際網路服務提供商(ISP):選電信還是聯通
內容分發網路(CDN)
告警:
- 方法訪問、日誌
- 分類:業務、系統層(硬體)
shell
檢視使用者的shell
ubuntu預設用的是bash,可以通過sh切換到sh的shell(沒有高亮顯示)
- shell執行命令是
- shell 又叫命令直譯器,可以一次執行好多命令
- 可以用()把命令包住執行,是用一個子程序來執行的;
- 是
- echo $?:表示上一個程式
Nginx配置
- main 配置
- event配置
- worker_rlimit_nofile 1024;最多能開啟多少個檔案(一個socket就是一個檔案描述符)
- html 配置
- mime.types(多媒體型別): 定義各種格式字尾,是屬於什麼型別的;在mime.types檔案裡可以看到定義的各種型別
- application/octet-stream:定義瞭如果字尾名在mime.types裡面沒有的話(不能識別),就,按照位元組(二進位制)傳輸
- sendfile 預設on:設定直接從核心空間傳給使用者,不經過使用者空間
- keepalive:0表示短連線
- gzip:是否壓縮傳輸
- server 配置
- listen :監聽埠
- root:根目錄
- location:反向代理,
- upstream:負載均衡
標準輸入輸出
- 輸入/輸出重定向
a+,w+,r+(都是讀寫)
- a+:追加
- w+:覆蓋
- r+:檔案不存在,不建立
函式
-
傳參方式跟C一樣
-
Shell指令碼中用#表示註釋,相當於C語言的//註釋。但如果#位於第一行開頭,並且是#!(稱為Shebang)則例外,它表示該指令碼使用後面指定的直譯器/bin/sh解釋執行。如果把這個指令碼檔案加上可執行許可權然後執行:
chmod a+x test.sh
./test.sh
- Shell會fork一個子程序並呼叫exec執行./test.sh這個程式,exec系統呼叫應該把子程序的程式碼段替換成./test.sh程式的程式碼段,並從它的_start開始執行。然而test.sh是個文字檔案,根本沒有程式碼段和_start函式,怎麼辦呢?其實exec還有另外一種機制,如果要執行的是一個文字檔案,並且第一行用Shebang指定了直譯器,則用直譯器程式的程式碼段替換當前程序,並且從直譯器的_start開始執行,而這個文字檔案被當作命令列引數傳給直譯器。因此,執行上述指令碼相當於執行程式
$ /bin/sh ./test.sh
-
以這種方式執行不需要test.sh檔案具有可執行許可權。
-
如果將命令列下輸入的命令用()括號括起來,那麼也會fork出一個子Shell執行小括號中的命令,一行中可以輸入由分號;隔開的多個命令,比如:
$ (cd ..;ls -l)
- 和上面兩種方法執行Shell指令碼的效果是相同的,cd …命令改變的是子Shell的PWD,而不會影響到互動式Shell。然而命令
$ cd ..;ls -l
- 則有不同的效果,cd …命令是直接在互動式Shell下執行的,改變互動式Shell的PWD,然而這種方式相當於這樣執行Shell指令碼:
$ source ./test.sh
或者
$ . ./test.sh
- 用於算術計算, []等價例如:
$ VAR=45
$ echo
VAR+3))
nginx
正向代理(翻–牆)
- 可以隱藏客戶端身份
反向代理
- Nginx 作用:
- 反向代理,
- 負載均衡,
- 靜態資源伺服器(所以建議主頁做成靜態的,直接放在Nginx上返回給使用者)
- 幫助業務伺服器管理非活躍連結(epoll)
- 理解