1. 程式人生 > >運維與shell指令碼

運維與shell指令碼

運維工作內容

負載均衡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
  • 用於算術計算, ( ( ) ) S h e l l (())中的Shell變數取值將轉換成整數,同樣含義的 []等價例如:

$ VAR=45
$ echo ( ( (( VAR+3))

nginx

正向代理(翻–牆)

  • 可以隱藏客戶端身份
    在這裡插入圖片描述

反向代理

在這裡插入圖片描述

  • Nginx 作用:
    • 反向代理,
    • 負載均衡,
    • 靜態資源伺服器(所以建議主頁做成靜態的,直接放在Nginx上返回給使用者)
    • 幫助業務伺服器管理非活躍連結(epoll)
  • 理解
  • 在這裡插入圖片描述