linux下設置定時執行shell腳本的示例

不少時候咱們有但願服務器定時去運行一個腳原本觸發一個操做,好比說定時去備份服務器數據、數據庫數據等 不適合人工常常作的一些操做這裏簡單說下前端

shell Shell俗稱殼,相似於DOS下的command和後來的cmd.exe。它接收用戶命令,而後調用相應的應用程序。做爲命令語言,它交互式解釋和執行用戶輸入的命令或者自動地解釋和執行預先設定好的一連串的命令;做爲程序設計語言,它定義了各類變量和參數,並提供了許多在高級語言中才具備的控制結構,包括循環和分支。linux

我這裏是centos6,5 shell

接下來 寫一個簡單的shell命令:數據庫

1.使用pwd命令查看當前路徑爲/root目錄vim

2.使用vi編輯器 能夠直接 # vim hello.sh編寫第一個shell文件 hello.sh, 注意必定要以.sh結尾centos

3.編寫第一個shell文件,#!/bin/bash 是必需要寫的,表示要是/bin/bash這個執行腳本的命令執行接下來寫的腳本, echo "hello world !!"表示想前端打印一句話,具體看各自需求。bash

4.經過chmod命令賦予該腳本的執行權限chmod 755 hello.sh,不然沒有執行權限,/root/hello.sh表示在全路徑下執行該shell腳本服務器

就此一個簡單的shell腳本就這樣寫完了 具體的這裏就不講了。curl

雖然一個簡單的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:關閉 
能夠看到二、三、四、5級別開機會自動啓動crond服務 
取消開機自動啓動crond服務: 
[root@CentOS ~]# chkconfig crond off

3.設置須要執行的腳本 

新增調度任務可用兩種方法: 
1)、在命令行輸入: crontab -e 而後添加相應的任務,wq存盤退出。 
2)、直接編輯/etc/crontab 文件,即vi /etc/crontab,添加相應的任務。 
crontab -e配置是針對某個用戶的,而編輯/etc/crontab是針對系統的任務 
查看調度任務 
crontab -l //列出當前的全部調度任務 
crontab -l -u jp //列出用戶jp的全部調度任務 
刪除任務調度工做 
crontab -r //刪除全部任務調度工做 
直接編輯 vim /etc/crontab ,默認的文件形式以下:

 

前四行是有關設置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表示這四個指定整數。符號「/」指定步進設置。「/<interger>」表示步進值。如0-59/2定義每兩分鐘執行一次。步進值也可用星號表示。如*/3用來運行每三個月份運行指定任務。 

以「#」開頭的爲註釋行,不會被執行。

 好比上述圖中 執行的是每隔一分鐘執行一半hello.sh腳本 上邊腳本輸出的內容 你們也知道   >> 符號 指定文件獲取內容的存放位置 好比訪問一個地址 命令 curl http://www.baidu.com 

linux系統字符界面 沒法顯示畫面只能把訪問的頁面編譯後的代碼原樣輸出 如:

這樣你們看着很亂吧

固然也有-I 參數 靜默訪問  curl -I http://www.baidu.com

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

cat 一下 查看  這樣就簡單多了

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

5.使用實例

實例1:每1分鐘執行一次command

命令:

* * * * * command

 

實例2:每小時的第3和第15分鐘執行

命令:

3,15 * * * * command

 

實例3:在上午8點到11點的第3和第15分鐘執行

命令:

3,15 8-11 * * * command

 

實例4:每隔兩天的上午8點到11點的第3和第15分鐘執行

命令:

3,15 8-11 */2 * * command

 

實例5:每一個星期一的上午8點到11點的第3和第15分鐘執行

命令:

3,15 8-11 * * 1 command

 

實例6:每晚的21:30重啓smb 

命令:

30 21 * * * /etc/init.d/smb restart

 

實例7:每個月一、十、22日的4 : 45重啓smb 

命令:

45 4 1,10,22 * * /etc/init.d/smb restart

 

實例8:每週6、週日的1 : 10重啓smb

命令:

10 1 * * 6,0 /etc/init.d/smb restart

 

實例9:天天18 : 00至23 : 00之間每隔30分鐘重啓smb 

命令:

0,30 18-23 * * * /etc/init.d/smb restart

 

實例10:每星期六的晚上11 : 00 pm重啓smb 

命令:

0 23 * * 6 /etc/init.d/smb restart

 

實例11:每一小時重啓smb 

命令:

* */1 * * * /etc/init.d/smb restart

 

實例12:晚上11點到早上7點之間,每隔一小時重啓smb 

命令:

* 23-7/1 * * * /etc/init.d/smb restart

 

實例13:每個月的4號與每週一到週三的11點重啓smb 

命令:

0 11 4 * mon-wed /etc/init.d/smb restart

 

實例14:一月一號的4點重啓smb 

命令:

0 4 1 jan * /etc/init.d/smb restart

 

實例15:每小時執行/etc/cron.hourly目錄內的腳本

命令:

01   *   *   *   *     root run-parts /etc/cron.hourly

說明:

run-parts這個參數了,若是去掉這個參數的話,後面就能夠寫要運行的某個腳本名,而不是目錄名了

相關文章
相關標籤/搜索