centos7—計划任務(at、cron)
計划任務:讓計算機在指定的時間執行指定的事情
1、分類:一次性計划任務:at(臨時的計划任務)
周期性計划任務:cron
2、計划任務管理:查atq、創建at、刪除atrm
注:服務器重啟一般都是晚上 凌晨2點
at 時間
atq 或 at -l 查計划列表
eg. at 20:00
at> poweroff 關機
at> ctrl+d
3、時間的寫法
HH:MM //18:30
midnight //0點 (午夜)
noon //12點 (中午)
teatime //16點(下午4點)
AM 或 PM后綴指定一天的上午或下午。 //at 2:00 pm
MMDDYY 、 MM/DD/YY 或 DD.MM.YY
now + 計數 時間單位(minutes 、hours 、 days 或 weeks)
eg. at now + 3 hours(從現在開始起三個小時后)
eg. at 4pm + 3 days //三天以后的下午4點執行一個任務
at 2am + tomorrom //明天上午2點
at 10am Jul 31 //7月31日上午10點
案例一:凌晨2點備份/etc目錄 到 /tmp格式為 etc.tar.xz
at 02:00
at> tar cvJf /tmp/etc.tar.xz /etc
at> ctrl+d
4、查看所有用戶的計划任務
atq
at -l
5、查看某個計划任務的詳細內容
at -c 工作號
6、刪除計划任務
atrm 工作號 ...
at -d 工作號 ...
案例二:腳本方式創建at計划任務.
echo 'ls;date;pwd' | at 3:00 #用管道符將任務傳給at命令
案例三:用at將指定文件(-f 文件名)中的命令設為計划任務.
#首先,創建命令文件
vim /opt/aplan #添加如下內容
ls
date
pwd
tar -czvf /tmp/etc.tar.gz /etc
7、at權限管理、安全
/etc/at.allow 白名單:只允許在此名單內的用戶使用at(此文件本身不存在)
/etc/at.deny 黑名單:在此名單內的用戶不可以使用at
注:當兩個文件都不存在,只有root用戶可以使用at
當兩個文件都存在,allow優先執行
-----------------------------------------------------------
at服務管理:
查at軟件是否已安裝:pm -q at
查at的文件列表:rpm -ql at
查at的配置文件列表:rpm -qc at
查at服務狀態:systemctl status atd 或 service atd status
重啟at服務:systemctl restart atd 或 service atd restart
關閉at服務:systemctl stop atd 或 service atd stop
開機不啟動at服務:systemctl disable atd 或 chkconfig atd off
開機啟動at服務:systemctl enable atd 或 chkconfig atd on
at的其他文件:
計划文件清單:ls /var/spool/at/* 用cat可以看這些文件
-----------------------------------------------------------
cron:周期性計划任務、循環性計划任務,主要用於備份數據。
crontab
usage:crontab [-u user] [ -e | -l | -r ]
-u <user> define user #指定用戶
-e edit user's crontab #編輯計划任務
-l list user's crontab #查看計划任務
-r delete user's crontab #刪除計划任務
1、crontab -e 編輯周期性計划任務的內容
2、查看配置:cat /etc/crontab
時間
min hour day month week command
分鍾 小時 日 月 周 動作(任務命令)
0-59 0-23 1-31 1-12 0-7 命令或腳本(寫絕對路徑)
30 2 1 * * rm -rf /tmp/* //每月1號的2:30分刪除/tmp目錄下的所有文件
5 * * 6 3 rm -rf /tmp/* //每年6月的每周三每小時的5分鍾刪除/tmp目錄下的所有文件
6 6 * 6 6 rm -rf /tmp/* //每年6月的周六的6點6分鍾刪除/tmp目錄下的所有文件
* 任何時刻
- 一段時間 // 8-11 * * * * rm -rf /tmp/* //每小時的8分鍾 9分鍾 10分鍾 11分鍾 刪除/tmp目錄下所有文件
, 分隔(不連續的時間) // 1,2,5,9 * * * * rm -rf /tmp/* //每小時的1分鍾 2分鍾 5分鍾 9分鍾 刪除/tmp目錄下所有文件
0-4,8-12 //
0-23/2 時間間隔 //1 0-23/2 * * * rm -rf /tmp/* // "0,2,4,6,8,10,12,14,16,18,20,22").
*/2 每隔2小時 //1 */2 * * * rm -rf /tmp/* 每隔2小時執行rm命令
* 0-23 * * * rm -rf /tmp/*
* */1 * * * rm -rf /tmp/*
3、時間的寫法
The time and date fields are:
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names,
see below)
day of week 0-7 (0 or 7 is
Sun, or use names)
案例一:每個星期三的下午10:00備份/etc/目錄到/tmp目錄叫2017-04-12_etc.tar.gz備份文件包含當天日期
crontab -e
* 22 * * 3 /usr/bin/tar cvzf /tmp/`/usr/bin/date +%F`_etc.tar.gz /etc
注:`命令`中的``為命令替換功能,系統會先執行``(反撇,反引號)中的命令.也可以將``寫成$()
案例二:只保留最近1個月的日志文件
crontab -e
1 * * * * find /var/log -mtime +30 |xarge -i rm -rf {}
案例三:每月1號的凌晨2點半清空臨時盤
crontab -e
30 2 1 * * /usr/bin/rm -rf /tmp/*
案例四:每周每天的晚上8:10關閉電腦,除了星期六,星期五,星期日的17:10關閉電腦
crontab -e
10 20 * * 1-4 /usr/sbin/poweroff
10 17 * * 5,7 /usr/sbin/poweroff
案例五:jim用戶每天在家目錄創建一個以日期命名的目錄20170412
crontab -u jim -e
1 0 * * * /bin/mkdir /home/jim/`date +%Y%m%d`
4、查詢周期性計划任務的內容
crontab -l #查看當前用戶
crontab -u jim - #查看指定用戶
5、刪除某用戶的所有周期性計划任務(刪除某個計划任務crontab -e 進入文本刪除)
crontab -r #當前用戶
crontab -u jim -r #指定用戶
系統定義的計划任務(默認)
更新whatis數據庫
更新updatedb數據庫
日志定期輪滾(日志切割)
清理/tmp /var/tmp
收集系統的狀態信息
vim /etc/crontab 配置文件
# 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
*/5 * * * * root 命令 //每隔5分鍾以root身份去執行命令
以下目錄內可以存在腳本 該腳本就會按照時間去執行
cd /etc
cron.hourly/ #每小時
cron.weekly/ #每周
cron.daily/ #每天
cron.monthly/ #每月
6、刪除超過一個月不使用的文件
cat /etc/cron.daily/tmpwatch
7、crontab服務管理:
查軟件是否已安裝:rpm -q crontabs
查軟件的文件列表:rpm -ql crontabs
查軟件的配置文件列表:rpm -qc crontabs
服務狀態:systemctl status crond 注:d是daemon守護進程
重啟at服務: systemctl restart crond 或 service crond restart
關閉at服務: systemctl stop crond 或 service crond stop
開機不啟動at服務: systemctl disable crond 或 chkconfig crond off
開機啟動at服務: systemctl enable crond 或 chkconfig crond on
8、cron權限管理
/etc/cron.allow 白名單:只允許在此名單內的用戶使用crontab(此文件本身不存在)
/etc/cron.deny 黑名單:在此名單內的用戶不可以使用crontab
注:兩個文件都不存在,只有root用戶可以使用crontab
兩個文件都存在,allow優先執行