Tag: Shell Script

Shell Script – 發現 Load Average 高自動執行指令

當系統的 Load Average 很高時, 可能面臨當機的風險, 遇到這個問題可以用 Shell Script 定時檢查系統的 Load Average, 當發現 Load Average 到達某一個設定好的數值時, 便自動執行一些指令, 例如重啟服務, kill process 或向系統管理員發出電郵通知等。以下 Shell Script 會透過定時讀取 /proc/loadavg 的數值, 當發現 Load Average 高時 (以下設定為 …

Shell Script 檢查並自動重啟 Apache httpd

如果主機出現問題時, 可能負載過高或者服務當掉, 最理想的做法還是要找出原因, 很多時只要修改一些設定便可以。 早前遇到一位客戶, 他安裝在 VPS 的 Apache 會無故當掉, 間隔由幾小時到一天不等, 檢查後 Load Average 一點也不高, 當掉後只要重新啟動 Apache 便沒問題, 初部估計可能是 mpm_prefork 的設定問題。由於修改後要觀察一段時間, 這段時間 Apache 也可能當掉, 便寫了這支 Shell Script, 會自動檢查 Apache 是否能回應請求, …

Shell Script 讀取網頁內容儲存到變數

Shell Script 要讀取網頁內容,並將輸出結果儲存到變數,可以用一些在 CLI 下執行的文字瀏覽器,由於很多系統都有安裝 wget 及 curl, 以下文章會介紹使用 wget 及 curl 這兩種方法完成。如果系統並未安裝 wget 及 curl,可以用以下指令安裝,如果已經安裝了,則不用安裝:RHEL, CentOS # yum install curl wget Debian, Ubuntu $ sudo apt-get install curl wget …

“> /dev/null 2>&1” 的意思

在 Unix Like 環境下用 crontab 排程執行指令或 Shell Script 時, 很多時最後都會加上 “> /dev/null 2>&1”, 例如: * * * * * /path/to/my-script.sh > /dev/null 2>&1 以下是對 “> /dev/null 2>&1” 分拆的解釋:>: 是重新導向, 例如將指令的執行結果寫入到檔案, …

Shell Script 檢查系統帳號是否存在

在 Shell Script 想檢查系統帳號是否存在, 可以用 grep 搜索 /etc/passwd 的內容達成, 指令是這樣:以上指令會檢查 /etc/passwd 檔案內, 是否有 “useraccount” 這個帳號存在, 其中 “^” 表示指定前面沒有任何字元, 而 “:” 則是在 /etc/passwd 用作分開每個欄位的分隔字元。上面指令執行後, 如果帳號不存在, 不會回傳任何內容, 如果帳號存在, 則會回傳在 /etc/passwd 的相關紀錄, 例如:useraccount:x:1001:1001::/home/useraccount:/bin/bash要將上面的功能放到 …

Linux 檢查密碼強度工具 — cracklib

要檢查密碼的強度, 單純以密碼長度及是否包含英文字母, 數字並不足夠, 例如 “abcd1234” 便是 8 個位, 包含字母及數字的密碼, 但這個密碼很簡單。cracklib 就是一套檢查密碼強度的工具, 以下是 cracklib 的安裝及使用方法。在 Redhat 及 Debian 系列的發行版, 安裝 cracklib 都很方便:RHEL / CentOS / Fedora: # yum install cracklib Debian …

sed 刪除包含 keywords 的整行資料

sed 除了可以對檔案內的 keyword 做 search & replace 外, 也可以將包含有 keyword 的整行刪除, 語法是:以上指令會對 filename 逐行搜索, 並將有 “keyword” 的整行刪除。另一個情況是想將兩個 keywords 中間的整行資料刪除, 語法可以改成這樣:以上指令會在 filename 內, 將有 “keyword-1” 及 “keyword-2” 的資料整行刪除。

crontab 每 30 秒自動執行

crontab 容許最少自動執行間隔為 1 分鐘, 即在 crontab 的格為是:如果需要將自動執行時間設定為少於 1 分鐘, 或者以秒數為單位, 可以透過 crontab 配合 sleep 指令完成, 或者建立一個 shell script 再配合 sleep 實現。以下會示範在 crontab 或 shell script, 設定每 30 秒自動執行, 如果需要設定其他秒數, 只要修改 …

防止 Shell Script 重複執行

Shell Script 對日常系統維護很實用,對於多用戶系統,Shell Script 經常面對一個問題是重複執行,即一個 Shell Script 正在執行時,避免另一個使用者執行。另一個情況是,當 Shell Script 變得複雜及龐大時,放到 crontab 定時執行時 (例如每分鐘執行一次),Shell Script 還未完成上次的執行,就重複自動執行一次。要防止 Shell Script 重複執行,一般上會用 lock file 及 PID 的方法,不論是 lock file 還是 PID,除了用 Bash 外,用其他程式語言 …