shell 定時指令碼

2021-09-17 18:29:01 字數 3097 閱讀 4318

很多時候我們有希望伺服器定時去執行乙個指令碼來觸發乙個操作,比如說定時去備份伺服器資料、資料庫資料等 不適合人工經常做的一些操作這裡簡單說下

shell shell俗稱殼,類似於dos下的command和後來的cmd.exe。它接收使用者命令,然後呼叫相應的應用程式。作為命令語言,它互動式解釋和執行使用者輸入的命令或者自動地解釋和執行預先設定好的一連串的命令;作為程式語言,它定義了各種變數和引數,並提供了許多在高階語言中才具有的控制結構,包括迴圈和分支。

我這裡是centos6,5 

接下來 寫乙個簡單的shell命令:

1.使用pwd命令檢視當前路徑為/root目錄

2.使用vi編輯器 可以直接 # vim hello.sh編寫第乙個shell檔案 hello.sh, 注意一定要以.sh結尾

3.編寫第乙個shell檔案,#!/bin/bash 是必須要寫的,表示要是/bin/bash這個執行指令碼的命令執行接下來寫的指令碼, echo "hello world !!"表示想前端列印一句話,具體看各自需求。

4.通過chmod命令賦予該指令碼的執行許可權chmod 755 hello.sh,否則沒有執行許可權,/root/hello.sh表示在全路徑下執行該shell指令碼

就此乙個簡單的shell指令碼就這樣寫完了 具體的這裡就不講了。

雖然乙個簡單的shell指令碼寫完了 但是執行後只能執行一次 對很多應用場景來說還是不夠,接下來說一下定時任務

定時任務 --相信很多小夥伴沒用過也聽說過吧。

這裡就不細講了直接進入正題

1.安裝crontab

vixie-cron軟體包是cron的主程式; 

crontabs軟體包是用來安裝、卸裝、或列舉用來驅動 cron 守護程序的**的程式。

2.開啟crontab服務

用以下的方法啟動、關閉這個cron服務: 

service crond start //啟動服務 

service crond stop //關閉服務 

service crond restart //重啟服務 

service crond reload //重新載入配置

檢視crontab服務狀態:service crond status 

手動啟動crontab服務:service crond start 

檢視crontab服務是否已設定為開機啟動,執行命令:ntsysv 

加入開機自動啟動: 

chkconfig –level 35 crond on

也可以用設定開機自動啟動crond服務: 

[root@centos ~]# chkconfig crond on 

檢視各個開機級別的crond服務運**況 

[root@centos ~]# chkconfig –list crond 

crond 0:關閉 1:關閉 2:啟用 3:啟用 4:啟用 5:啟用 6:關閉 

可以看到2、3、4、5級別開機會自動啟動crond服務 

取消開機自動啟動crond服務: 

[root@centos ~]# chkconfig crond off

3.設定需要執行的指令碼

前四行是有關設定cron任務執行的環境變數。shell變數的值指定系統使用的shell環境(該樣例為bash shell),path變數定義了執行命令的路徑。cron的輸出以電子郵件的形式發給mailto變數定義的使用者名稱。如果mailto變數定義為空字串(mailto=""),電子郵件不會被傳送。執行命令或指令碼時home變數可用來設定基目錄。

檔案/etc/crontab中每行任務的描述格式如下: 

minute hour day month dayofweek command minute - 從0到59的整數 hour - 從0到23的整數 day - 從1到31的整數 (必須是指定月份的有效日期)month - 從1到12的整數 (或如jan或feb簡寫的月份)dayofweek - 從0到7的整數,0或7用來描述週日 (或用sun或mon簡寫來表示)command - 需要執行的命令(可用as ls /proc >> /tmp/proc或 執行自定義指令碼的命令)  root表示以root使用者身份來執行

run-parts表示後面跟著的是乙個資料夾,要執行的是該資料夾下的所有指令碼

對於以上各語句,星號(*)表示所有可用的值。例如*在指代month時表示每月執行(需要符合其他限制條件)該命令。 整數間的連字型大小(-)表示整數列,例如1-4意思是整數1,2,3,4指定數值由逗號分開。如:3,4,6,8表示這四個指定整數。符號「/」指定步進設定。「/」表示步進值。如0-59/2定義每兩分鐘執行一次。步進值也可用星號表示。如*/3用來執行每三個月份執行指定任務。 

以「#」開頭的為注釋行,不會被執行。

比如上述圖中 執行的是每隔一分鐘執行一半hello.sh指令碼 上邊指令碼輸出的內容 大家也知道   >> 符號 指定檔案獲取內容的存放位置 比如訪問乙個位址 命令 curl  

linux系統字元介面 無法顯示畫面只能把訪問的頁面編譯後的**原樣輸出 如:

這樣大家看著很亂吧

當然也有-i 引數 靜默訪問  curl -i

這樣只顯示一組http狀態 但還是很亂 直接把他寫進固定的日誌檔案就方便多了 

cat 一下 檢視  這樣就簡單多了

就此乙個簡單的定時任務就完成了 

定時清理檔案shell指令碼

乙個測試機上部署多個應用,總是經常出現磁碟空間已滿,不能部署應用的情況,所以寫了個小指令碼,用於定時清理日誌,避免出現這種情況。1 如果是清理固定路徑下的檔案,可以直接用命令方式。命令方式 1 編寫命令 find logs name catalina.out log and mtime 7 測試方法...

定時清理檔案shell指令碼

乙個測試機上部署多個應用,總是經常出現磁碟空間已滿,不能部署應用的情況,所以寫了個小指令碼,用於定時清理日誌,避免出現這種情況。1 如果是清理固定路徑下的檔案,可以直接用命令方式。命令方式 1 編寫命令 find logs name catalina.out log and mtime 7 測試方法...

shell指令碼定時壓縮日誌

日誌檔案較大,每天定時壓縮昨天的日誌 新建乙個檔案 vi gz log.sh vim gz log.sh bin bash 凌晨2點時間 am0 020000 凌晨3點時間 am1 030000 壓縮檔案路徑 path while do 系統前時間 systemtime date h m s 日誌日...