1. 程式人生 > >Linux操作系統計劃任務

Linux操作系統計劃任務

dai root rond anacron .sh rep make part 檢查

++++++++++++++++++++++++++++++++++++++++++++++++
標題:Linux操作系統的計劃任務
內容:計劃任務分為單次任務和周期性任務,周期任務分為系統級計劃任務和用戶級計劃任務
重點:重點掌握周期性計劃任務,at單次任務作為了解內容,在本章最後進行簡單介紹
時間:2019年4月22日
++++++++++++++++++++++++++++++++++++++++++++++++
1. 計劃任務分類
定時任務分為單次計劃任務和周期性計劃任務
周期性計劃任務分為系統級周期任務和用戶級周期任務


2. 計劃任務的特點(crond)
[[email protected] ~]# ps aux |grep ‘crond‘ |grep -v ‘grep‘ //計劃任務的進程

root 1791 0.0 0.0 117296 1384 ? Ss 01:55 0:00 crond
[[email protected] ~]# ll /var/log/cron //計劃任務的日誌
-rw-------. 1 root root 11408 Apr 19 06:01 /var/log/cron
註意:
crond服務會每個1分鐘對計劃任務進行一次檢查,以執行需要運行的計劃任務
計劃任務執行時不會講內容顯示在終端上,而是通過郵件進行通知


3. 系統級周期計劃任務
3.1 定義方式1
[[email protected] ~]# vim /etc/crontab //默認該文件中沒有任何計劃任務,介紹了定義計劃任務的格式
# 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
* * * * * root cd /home/ ; ls
0 0 * * * root /bak_bash/mysql_bak.sh
0 2 * * * alice run-parts /cron-test
註意:
計劃任務的解讀讀到第一個"*"符號即可。
生產環境中(服務器)的計劃任務最高一般不會超過月,常見的是天。
計劃任務中提到的日和月是且的關系。
計劃任務中提到的日和星期是或的關系。

3.2 定義方式2
[[email protected] ~]# ls /etc/cron.hourly/
0anacron
[[email protected] ~]# ls /etc/cron.daily/
cups logrotate makewhatis.cron mlocate.cron prelink readahead.cron tmpwatch
[[email protected] ~]# ls /etc/cron.weekly/
[[email protected] ~]# ls /etc/cron.monthly/
readahead-monthly.cron
例如:現在某個任務,需要每小時進行執行一次,可以直接將腳本放在/etc/cron.hourly/

3.3 系統級計劃任務流程
[[email protected] ~]# ps aux |grep ‘crond‘ |grep -v ‘grep‘ //計劃任務的進程沒分中檢查計劃任務
root 1791 0.0 0.0 117296 1384 ? Ss 01:55 0:00 crond
[[email protected] ~]# cat /etc/crontab
[[email protected] ~]# ls /etc/cron.hourly/
0anacron
[[email protected] ~]# cat /etc/crontab //該腳本會啟動一個進程,該進程存在一個配置文件
/usr/sbin/anacron -s
[[email protected] ~]# cat /etc/anacrontab
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
問題:如何能夠確認計劃任務在定義的時間之內被執行過呢????
[[email protected] ~]# ll /var/spool/anacron/ //對應到anacrontab進程的JOB ID
-rw-------. 1 root root 9 Apr 19 04:12 cron.daily
-rw-------. 1 root root 9 Apr 19 03:18 cron.monthly
-rw-------. 1 root root 9 Apr 19 04:32 cron.weekly
[[email protected] ~]# cat /var/spool/anacron/cron.daily
20190419


4. 用戶級計劃任務
[[email protected] ~]# ll /var/spool/cron/root //root用戶的計劃任務文件
[[email protected] ~]# crontab -u mysql -e //編輯幾家任務
[[email protected] ~]# crontab -u mysql -l //查看計劃任務
* * * * * cd /home/ ; ls
[[email protected] ~]# mail //確認計劃任務已經執行
[[email protected] ~]# crontab -u mysql -r //清除計劃任務
註意:
與系統計劃任務略有不同,不需要指定用戶去執行
* * * * * /mysql_bak.sh //每分鐘執行一次
0 * * * * /mysql_bak.sh //每小時執行一次
0 2 * * * /mysql_bak.sh //每天2:00執行一次
0 2 1 * * /mysql_bak.sh //每月1日2:00執行一次
0 */2 * * /mysql_bak.sh //每個兩個小時執行一次
0 2 * * 0 /mysql_bak.sh //每月1日或每星期日執行一次


5. at定時任務
[[email protected] ~]# at now +2min //創建任務
at> useradd alice
at> echo "alice" |passwd --stdin alice
at> EOF
job 2 at 2019-04-19 06:50
[[email protected] ~]# atq root //任務查詢
2 2019-04-19 06:50 a root
[[email protected] ~]# id alice
uid=501(alice) gid=501(alice) groups=501(alice)
[[email protected] ~]# at now +2min
at> cd /home/;ls
at> <EOT>
job 3 at 2019-04-19 06:52
[[email protected] ~]# atq root
3 2019-04-19 06:52 a root
[[email protected] ~]# atrm 3 //刪除任務
[[email protected] ~]# atq
[[email protected] ~]# atq root

Linux操作系統計劃任務