定時任務(wù)的基本概述钳恕、語法、編寫蹄衷、調(diào)試
一忧额、定時任務(wù)基本概述
1.什么是crond
crond就是計劃任務(wù),類似于鬧鐘愧口,定點執(zhí)行睦番。
2.為什么要是用crond
crond主要是做一些周期性的任務(wù)
下面是一些使用場景:
場景一:定期備份重要的文件或數(shù)據(jù)
場景二:促銷,準點開啟和關(guān)閉耍属,搶購接口
場景三:每分鐘檢測超時訂單托嚣,超過30分鐘未支付的訂單進行取消
場景四:每隔5分鐘,到各個電商平臺刷取訂單信息寫入自己公司的系統(tǒng)中厚骗,進行發(fā)貨
3.使用情況
①系統(tǒng)級別的定時任務(wù):臨時文件清理示启、系統(tǒng)信息采集等
②用戶級別的定時任務(wù):定時備份數(shù)據(jù)、同步時間领舰、訂單超時自動取消等
小結(jié):crond只能控制這個任務(wù)多久運行一次夫嗓,至于是什么任務(wù)與crond無關(guān)迟螺。
二、定時任務(wù)的語法
配置文件 /etc/crontab 中記錄了時間周期的含義
[root@10 ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# 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
# 分 時 日 月 周 用戶名 要執(zhí)行的命令
分 時 日 月 周 | 含義 |
---|---|
* * * * * | 每分鐘都要執(zhí)行 |
* 12 * * * | 每天12點的每分鐘都要執(zhí)行 |
00 12 3 * * | 每個月3號的12點整執(zhí)行 |
00 12 3 6 * | 每年6月3號的12點整執(zhí)行 |
00 12 * * 3 | 每周三的12點整執(zhí)行 |
*/20 12 * * * | 每天的12點舍咖,每20分鐘執(zhí)行一次:12:00 12:20 12:40
|
符號 | 含義 |
---|---|
3,5,7 | 第3矩父、第5、第7 |
2-8 | 閉區(qū)間[2,8]排霉,2到8的整數(shù) |
*/5 | 每隔5單位間隔(分窍株、時、日郑诺、月夹姥、周) |
三、定時任務(wù)的編寫
1.命令:crontab
選項 | 含義 |
---|---|
-e | 編輯定時任務(wù) |
-l | 查看定時任務(wù) |
-r | 刪除定時任務(wù)(謹慎) |
-u | 指定其他用戶 |
2.案例
每天凌晨3點做一次備份辙诞?備份/etc/目錄到/backup下面 tar
1) 將備份命令寫入一個腳本中
2) 每天備份文件名要求格式: 2020-01-01_hostname_etc.tar.gz
3) 存放備份內(nèi)容的目錄要求只保留三天的數(shù)據(jù)
4) 在執(zhí)行計劃任務(wù)時辙售,不要輸出任務(wù)信息
第一步:先寫一個腳本文件
[root@oldboy ~]# vim /opt/backup.sh
#!/usr/bin/bash
#1.使用 tar 命令備份/etc/目錄到/backup下面
mkdir -p /backup
tar czf /backup/$(date +%F)_$(hostname)_etc.tar.gz /etc/ &>/dev/null
#2.保留近三天的數(shù)據(jù),其余全部刪除
find /backup -type f -name "*.tar.gz" -mtime +3 -delete
第二步:編寫定時任務(wù)
[root@oldboy ~]# crontab -l
#每天凌晨3點飞涂,對/etc/做一次備份 by che
00 03 * * * /usr/bin/sh /opt/backup.sh &>/dev/null
第三步:賦予腳本文件執(zhí)行權(quán)限
[root@oldboy ~]# chmod +x /opt/backup.sh
[root@oldboy ~]# ll /opt/
總用量 4
-rwxr-xr-x. 1 root root 264 4月 10 18:14 backup.sh
3.編寫思路
1.手動執(zhí)行命令旦部,然后保留執(zhí)行成功的結(jié)果
2.編寫腳本 # 統(tǒng)一路徑 例如 /scripts
3.執(zhí)行腳本 # bash 命令執(zhí)行,防止腳本沒有增加執(zhí)行權(quán)限 chmod +x
4.編寫定時任務(wù) # 注釋(任務(wù)较店、人士八、時間),先粘貼腳本執(zhí)行的命令梁呈,再設(shè)定執(zhí)行周期
5.調(diào)試定時任務(wù)
4.注意事項
①要學(xué)會加注釋
②將需要定期執(zhí)行的任務(wù)寫入到Shell腳本中婚度,避免直接使用命令無法使用的情況
③定時任務(wù)的結(jié)尾一定要有 &>/dev/null 或者將結(jié)果追加重定向 >>/tmp/date.log 文件
④注意有些命令無法成功執(zhí)行的 echo "123" >>/tmp/test.log &>/dev/null
⑤如果一定要用命令,命令必須使用絕對路徑
5.存放定時任務(wù)的文件官卡,可對文件進行備份
/var/spool/cron/ 目錄下的文件蝗茁,文件名稱為用戶名稱(username)
6.不允許某一用戶使用crontab命令
echo "username" >>/etc/cron.deny
四、定時任務(wù)如何調(diào)試
crond調(diào)試
- 1.調(diào)整任務(wù)每分鐘執(zhí)行的頻率, 以便做后續(xù)的調(diào)試寻咒。
先哮翘,手動執(zhí)行沒問題。
再毛秘,crond 每分鐘執(zhí)行以下饭寺,進行測試。
最后叫挟,調(diào)整為需要執(zhí)行的時間艰匙,進行執(zhí)行。 - 2.如果使用cron運行腳本霞揉,請將腳本執(zhí)行的結(jié)果寫入指定日志文件, 觀察日志內(nèi)容是否正常旬薯。
- 3.命令使用絕對路徑, 防止無法找到命令導(dǎo)致定時任務(wù)執(zhí)行產(chǎn)生故障。
- 4.通過查看/var/log/cron日志适秩,以便檢查我們執(zhí)行的結(jié)果绊序,方便進行調(diào)試。