Linux定時任務crontab學習總結

使用前準備

Crontab簡介

crontab命令常見於Unix和類Unix的操作系統之中,用於設置週期性被執行的指令。該命令從標準輸入設備讀取指令,並將其存放於“crontab”文件中,以供之後讀取和執行。

用途:

(一) 每週日誌切割備份

(二) 每天凌晨對當日數據統計

(三) 每個月備份關鍵數據

(四) 每天系統檢查

(五) 定時發送郵件

(六)......


Crontab安裝及基本語法

直接在線安裝:

//清理yum緩存

yumclean all

//更新yum

yumupdate

//安裝crontab

yuminstall –y cronie crontabs

//檢查crond服務是否安裝及啓動

yumlist cronie && systemctl status crond

有提示active則爲服務安裝成功。

 

//檢查crontab工具是否安裝

yum listcrontabs && which crontab && crontab –l

解釋:

yum listcrontabs:檢查crontabs是否安裝,

&&:是前面的語句成立纔會往後面執行

whichcrontab:crontab安裝的路徑

crontab–l:當前的任務列表,會顯示配置的任務列表,如沒有則會顯示一行空白

//進入到crontab配置文件,並可以配置定時規則和需要執行的語句

crontab–e

//配置任務完成,重啓crond

systemctlrestart crond

//查看crond狀態

systemctlstatus crond

 

配置文件

在我們使用 Crontab –e 編輯定時任務時實際上是編輯的這個/var/spool/cron/user文件,後面的user是指當前登錄的用戶,如用root登錄,那麼實際的任務配置文件就是/var/spool/cron/root文件。

系統配置文件路徑:/etc/crontab

Crontab在執行時,會先查看系統配置文件裏面的任務,然後再去查看用戶下面的配置文件

 

環境變量

Crontab不僅支持shell語句,也支持像java等第三方工具命令。如使用java語句,需要添加環境變量。

第一種添加方式,直接加到配置文件裏面:

添加path到/etc/crontab

PATH=/sbin:/bin:usr/usr/local/jdk1.8/bin

第二種,在執行具體任務時,引入系統環境變量/用戶環境變量【前提是系統環境變量裏已經提前設置了第三方工具變量】:

//定時執行test.sh,並在執行前引入系統環境變量

* * ** * source /etc/profile; sh /root/test.sh

//定時執行test.sh,並在執行前引入用戶環境變量

* * ** * source /root/.bash_profile; sh /root/test.sh

 

Crontab系統日誌

Crontab日誌保存在/var/log/cron下面,在執行任務時如果出錯可以查看日誌。

//查看日誌文件最近的10行日誌信息

tail–n 10 /var/log/cron

crontab語法

 

Crontab語法格式

Crontab基本格式如下:

*  *  *  *  *  command

分 時 日 月 周 命令

 第1列表示分鐘1~59 每分鐘用*或者 */1表示

第2列表示小時1~23(0表示0點)

第3列表示日期1~31

第4列表示月份1~12

第5列標識號星期0~6(0表示星期天)

第6列代表要運行的命令。

 

* :代表該位置的所有可用的數字

/ :代表每的意思 */5 如在分的位置,則代表每5分鐘

-         代表區間,5-10如在分的位置,代表第5到第10分鐘

,:代表分割,5,10如在分的位置,代表第2和第10分鐘

如果是直接*****則代表每分鐘執行一次

注意每一行一個任務,且*****和command之間必須空格隔開

 

 Crontab語法例子

30 21* * * /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每晚的21:30重啓apache。

45 41,10,22 * * /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每月1、10、22日的4 : 45重啓apache。

10 1* * 6,0 /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每週六、週日的1 : 10重啓apache。

0,3018-23 * * * /usr/local/etc/rc.d/lighttpd restart

上面的例子表示在每天18 : 00至23 : 00之間每隔30分鐘重啓apache。

0 23* * 6 /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每星期六的11 : 00 pm重啓apache。

0 */1* * * /usr/local/etc/rc.d/lighttpd restart

每一小時重啓apache

023-7/1 * * * /usr/local/etc/rc.d/lighttpd restart

晚上11點到早上7點之間,每隔一小時重啓apache

0 114 * mon-wed /usr/local/etc/rc.d/lighttpd restart

每月的4號與每週一到週三的11點重啓apache

0 4 1jan * /usr/local/etc/rc.d/lighttpd restart

一月一號的4點重啓apache

* * ** * echo –e “test” > /root/test.out

每分鐘將”test”寫入到root下面的test.out文件裏面,>是重定向符號

 

 Crontab實例

 定時清理系統日誌

//查看當前目錄下各種文件大小

du –sh *  

//每天凌晨1點清空一遍messages日誌文件

* 1 ** *  cat /dev/null  > /var/log/message

/dev/null代表空設備文件,相當於把空輸出到message,也就是清除。

如果需要清除多個文件,可以定時執行腳本。

* 1 ** * sh  /root/log_clean.sh

腳本文件如下:log_clean.sh

#!/bin/sh
cat /dev/null  > /var/log/message
cat /dev/null  > /var/log/sthlog

定時備份文件

備份腳本如下:/data/backup.sh

#!/bin/sh
basedir = /data/backup
backup_file = $basedir/backup_file/$(date+%F_%H%M)
[ ! –d “$backup_file” ] && mkdir –p $backup_file
cd /data
tar –jpcf $backup_file/backup.tar.bz2 backup

上述腳本將backup文件夾打包備份到backup_file下面,並以日期命名了一個文件夾。

//判斷$backup_file該路徑是否存在,如不存在則創建一個該路徑

[ ! –d“$backup_file” ] && mkdir –p $backup_file

 

創建crontab任務:

$ crontab–e

寫入以下任務:

* * ** * sh /data/backup.sh

//配置任務完成,重啓crond

systemctlrestart crond

//查看crontable任務

crontab–l


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章