cron 計劃任務
mysql
做用: 計劃任務主要是作一些週期性的任務,目前最主要的用途是按期備份數據
web
1、cron基礎sql
[root@ys ~]# ps aux |grep cron |grep -v 'grep'
root 5613 0.0 0.0 117204 1376 ? Ss 09:36 0:01 crond
root 6812 0.0 0.0 19396 976 ? Ss 10:01 0:00 /usr/sbin/anacron -s
crond進程每分鐘檢查一次,以運行相應的任務
crond日誌文件/var/log/cron
=================================================數據庫
2、系統級的計劃任務
更新whatis數據庫 ;日誌按期輪轉 ; 清理/tmp,/var/tmp;收集系統的狀態信息...
定義方式一:
[root@ys ~]# vim /etc/crontab
* * * * * root ls
0 * * * * root ls
0 2 * * * root ls
0 2 1 * * root /mysql_back.sh
0 2 1 3 * jack run-parts /cron-test
定義方式二:
[root@ys ~]# ls /etc/cron.hourly/
0anacron
anacron: /etc/anacrontab
[root@wang ~]# vim /etc/anacrontab
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
anacron timestamp: /var/spool/anacron
[root@wang ~]# ls /var/spool/anacron/
cron.daily cron.monthly cron.weekly
[root@wang ~]# ls /etc/cron.daily
00webalizer cups makewhatis.cron prelink rhsmd
certwatch logrotate mlocate.cron readahead.cron tmpwatch
[root@wang ~]# ls /etc/cron.weekly/
[root@wang ~]# ls /etc/cron.monthly/
readahead-monthly.cron
===================================================
3、用戶級的計劃任務
[root@wang ~]# crontab -e //建立計劃任務
* * * * * /bin/ls
[root@wang ~]# crontab -l //查看計劃任務
* * * * * /bin/ls
[root@wang ~]# ls /var/spool/cron/
root
[root@wang ~]# cat /var/spool/cron/root
* * * * * /bin/ls
vim
[root@wang ~]# tail /var/log/cron //查看日誌
[root@wang ~]# crontab -u alice -e
===================================================
做業語法格式:
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
00 02 * * * ls //天天2:00整
00 02 1 * * ls //每個月1號2:00整
00 02 14 2 * ls //每一年2月14號2:00整
00 02 * * 7 ls //每週日2:00整
00 02 14 2 7 ls //每一年2月14號2:00整 或者 每週日2:00整,這兩個時間都執行
00 02 * * * ls //天天2:00整
* 02 * * * ls //天天2:00中的每一分鐘
* * * * * ls //每分鐘執行ls
* * 14 2 * ls //2月14號的每分鐘
*/5 * * * * ls //每隔5分鐘
00 02 1,5,8 * * ls //每個月1,5,8號的2:00整
00 02 1-8 * * ls //每個月1到8號的2:00整
bash
========================================================
案例1:備份etc目錄,要求:
1. 天天4:00備份/etc目錄到/var/back
2. 將備份命令寫在腳本中,如/root/back.sh,加執行權限
3. 天天備份的文件名包含當天的日期,如2017-1-09_etc.tar.gz
4. 計劃任務執行時,屏幕不產生任何輸出 &>/dev/null
5. 只保留最近5天的備份 find /var/back -mtime +5 |xargs rm -rf
1. 編寫腳本
[root@wang ~]# vim /root/back.sh
第一種版本
tar -czf /var/back/`date +%F`_etc.tar.gz /etc
find /var/back -mtime +5 |xargs rm -rf
第二種版本
#!/bin/bash
filename=`date +%F`_etc.tar.gz
back_dir=/var/back
# 判斷備份文件存放目錄是否存在
if [ ! -d $back_dir ];then
mkdir -p $back_dir
fi
#備份
tar -czf ${back_dir}/$filename /etc &>/dev/null
#刪除修改時間超過5天的文件
cd ${back_dir}
find . -mtime +5 |xargs rm -rf
2. 手動測試腳本
[root@wang ~]# chmod a+x /root/back.sh
[root@wang ~]# chattr +i /root/back.sh
[root@wang ~]# /root/back.sh
[root@wang ~]# ll /var/back/
總計 11720
-rw-r--r-- 1 root root 11984709 09-14 17:59 2017-01-16_etc.tar.gz
[root@wang ~]# date 01171200
[root@wang ~]# /root/back.sh
[root@wang ~]# ll /var/back/ide
-rw-r--r-- 1 root root 11984709 09-14 17:59 2017-01-16_etc.tar.gz
3. 配置cron執行腳本
[root@wang ~]# crontab -e
0 4 * * * /root/back.sh
[root@wang ~]# crontab -l
0 4 * * * /root/back.sh
4. 測試cron
[root@wang ~]# date 09220359.50
[root@wang ~]# date
2013年 09月 22日 星期日 04:00:16 CST
[root@wang ~]# ll /var/back/
-rw-r--r-- 1 root root 11984709 09-22 04:00 2013-09-22_etc.tar.gz
[root@wang ~]# tail /var/log/cron
Sep 20 12:03:01 wang crond[5873]: (alice) CMD (ls)
Sep 20 12:03:42 wang crontab[5870]: (root) REPLACE (root)
Sep 20 12:03:42 wang crontab[5870]: (root) END EDIT (root)
Sep 20 12:03:46 wang crontab[5880]: (root) LIST (root)
Sep 20 12:04:01 wang crond[5882]: (alice) CMD (ls)
Sep 20 12:05:01 wang crond[5895]: (alice) CMD (ls)
Sep 22 04:00:20 wang crond[5909]: (alice) CMD (ls)
Sep 22 04:00:20 wang crond[5912]: (root) CMD (/root/back.sh)
========================================================
擴展知識點: 讓任務實現秒級執行
1、經過計劃任務實現
每隔10秒執行命令date
* * * * * date >/dev/pts/1
* * * * * sleep 10; date >/dev/pts/1
* * * * * sleep 20; date >/dev/pts/1
* * * * * sleep 30; date >/dev/pts/1
* * * * * sleep 40; date >/dev/pts/1
* * * * * sleep 50; date >/dev/pts/1
2、經過程序實現
# vim while01.sh
#!/bin/bash
測試
while :
do
echo "ok"
sleep 5 url
done pwa