什么是CRONTAB?
CRONTAB是一個(gè)用于設(shè)置周期性執(zhí)行任務(wù)的工具
crontab命令常見(jiàn)于Unix和類Unix的操作系統(tǒng)之中,用于設(shè)置周期性被執(zhí)行的指令。該命令從標(biāo)準(zhǔn)輸入設(shè)備讀取指令,并將其存放于“crontab”文件中,以供之后讀取和執(zhí)行。該詞來(lái)源于希臘語(yǔ) chronos(χρνο),原意是時(shí)間。通常,crontab儲(chǔ)存的指令被守護(hù)進(jìn)程激活, crond常常在后臺(tái)運(yùn)行,每一分鐘檢查是否有預(yù)定的作業(yè)需要執(zhí)行。這類作業(yè)一般稱為cron jobs。

CRONTAB案例應(yīng)用
1、每分鐘需要執(zhí)行一個(gè)腳本進(jìn)行系統(tǒng)Health Check
2、每天凌晨對(duì)過(guò)去的一天系統(tǒng)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)
3、每周對(duì)系統(tǒng)日志進(jìn)行備份切割
4、每個(gè)月對(duì)系統(tǒng)關(guān)鍵數(shù)據(jù)進(jìn)行備份
CRONTAB安裝
安裝crond服務(wù)和crontab工具(CentOS7)
yum clean all??????????????????????????????????????????????????? 清理yum緩存
yum update????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 更新系統(tǒng)安裝包到最新版本
yum install -y cronie crontabs?????????????????????? 安裝crond服務(wù)和crontab工具到centos中
驗(yàn)證CROND服務(wù)
驗(yàn)證crond服務(wù)和crontab工具(CentOS7)
檢查crond服務(wù)是否安裝及啟動(dòng):yum list cronie&&systemctl status crond
檢查crontab工具是否安裝:yum list crontabs&&which crontab&&crontab -l


CRONTAB架構(gòu)

CRONTAB文件格式

說(shuō)明:
第一個(gè)占位符代表分鐘。范圍是0-59
第二個(gè)占位符代表小時(shí)。范圍是0-23
第三個(gè)占位符代表日。范圍1-31
第四個(gè)占位符代表月。范圍1-12
第五個(gè)占位符代表星期。范圍是0-6
My Command。要允許的命令,范圍:命令或腳本
*代表取值范圍的數(shù)字,通常代表對(duì)應(yīng)時(shí)間區(qū)間內(nèi)所涵蓋的所有數(shù)字
/代表每,通常與*組合。例如2/*,在分這個(gè)占位符中代表每2分鐘。5/*,在時(shí)這個(gè)占位符代表每5小時(shí)
連字符-代表某個(gè)時(shí)間或者某個(gè)數(shù)字到某個(gè)數(shù)字之間的區(qū)間。例如2-10,在分這個(gè)占位符代表第二分鐘到第10分鐘
,分開幾個(gè)離散的數(shù)字。例如在分這個(gè)占位,2,10就是代表第二分鐘,第10分鐘
EXAMPLE
每分鐘打印一行shell輸出并寫入文件
* * * * * echo -e "This is a test output">/root/test.out
查看表單任務(wù):crontab -l
緩存生效:systemctl? restart? crond
CRONTAB配置文件
系統(tǒng)配置文件
/etc/crontab
系統(tǒng)用戶crontab配置文件保存目錄(crontab -e)
說(shuō)明:crontab -e是將任務(wù)寫入/var/spool/cron/文件
root:/var/spool/cron/root
user01:/var/spool/cron/user01
創(chuàng)建一個(gè)use01的用戶
useradd user01
su - user01
CRONTAB環(huán)境變量

LINUX系統(tǒng)環(huán)境變量設(shè)置
vi /etc/profile
在文件最底部添加
PATH=$PATH:/usr/local/jdk1.8.0_111/bin
export PATH
用戶級(jí)別環(huán)境變量設(shè)置
vi /root/.bash_profile
如果原來(lái)有PATH=$PATH:$HOME/bin
在后面追加
PATH=$PATH:$HOME/bin:/usr/local/jdk1.8.0_111/bin
export PATH
在配置系統(tǒng)與用戶級(jí)別環(huán)境變量后編寫shell腳本與環(huán)境變量配合完成crontab表單任務(wù)的執(zhí)行操作。
vi /root/test.sh
java -version 2>/root/script.out
crontab? -e?? 添加crontab計(jì)劃任務(wù)
* * * * *?? source /etc/profile;sh? /root/test.sh
* * * * *??? source /root/.bash_profile;sh /root/rest.sh
systemctl? restart crond 重啟計(jì)劃任務(wù),使任務(wù)生效
CRONTAB命令行
編輯并保存當(dāng)前用戶的計(jì)劃任務(wù)
crontab -e
重啟crond服務(wù),使剛添加的任務(wù)生效
systemctl?? restart? crond
查看當(dāng)前用戶(root)保存的計(jì)劃任務(wù)
crontab? -l
cat /var/spool/cron/root
CRONTAB日志

查看crontab日志? cat /var/log/cron
查看最后2條crontab日志? tail? -n 2 /var/log/cron
清理系統(tǒng)日志
系統(tǒng)日志存放目錄 /var/log
cron???? crontab日志
firewalld ? ? 系統(tǒng)防火墻日志信息
lastlog? 登錄保存日志信息
message? 系統(tǒng)的總?cè)罩?/p>
secure? ssh相關(guān)服務(wù)的日志信息
查看當(dāng)前目錄下所有文件日志大小
du -sh? *
日志清理
* * * * *? cat?? /dev/null >? /var/log/messages
crontab? -l
systemctl?? restart crond
shell腳本清理多條日志
在root下創(chuàng)建一個(gè)shell腳本log_clean.sh
#!/bin/sh
cat?? /dev/null?? >/var/log/messages
cat?? /dev/null?? >/var/log/secure
crontab -e
* * * * * sh /root/log_clean.sh
crontab -l
systemctl?? restart? crond
備份Source? Code
編寫shell腳本www_backup.sh
#!/bin/sh
basedir=/data/backup
www_src=$basedir/www_src/$(date +%F_%H%M)
[ ! -d "$www_src" ] && mkdir -p $www_src
cd /data
tar -jpcf $www_src/www.tar.bz2 www
crontab -e
* * * * * sh /data/script/www_backup.sh
crontab -l
systemctl restart? crond
CRONTAB在iptables上的應(yīng)用
禁用firewalld??? systemctl? disable firewalld
關(guān)閉firewalld??? systemctl stop firewalld
查看firewall???????? systemctl? status?? firewalld
安裝iptables服務(wù)? yum? install?? iptables-services
開啟iptables服務(wù)? systemctl enable? iptables
啟動(dòng)iptables服務(wù)? systemctl start? iptables
查看iptbles是否安裝成功? iptables? -V
編寫firewall.sh
#!/bin/sh
iptables -F
list=/data/script/blacklist.txt
for line in`cat $list` ;do
?? iptables -I? INPUT -s$line? -j DROP
echo? "$line is? dropped into? blacklist"
done
crontab -e
* * * * * source? /etc/profile; sh? /data/script/firewall.sh