使用前準備
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