在Linux中經常需要我們去執行配置文件的讀取、日誌文件的保存等定期執行的任務。可以通過一些配置讓系統自動執行這些任務。
定期任務執行:
1、在未來的某個時間僅執行一次
# at
# batch
at and batch read commands from standard input or a specified file which are to be executed at a later time .
其時間表示法:
HH:MM [AM|PM]
MM/DD/YY
at now+#
miniutes
hours
days
weeks
例:# at now+10min
可以輸入 Ctrl+d 來提交at任務
at -l = atq 查看列表
at -r job_num = atrm job_num 清除任務
這些任務的執行輸出一般都通過mail方式發給當前用戶:
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/root": 2 messages 1 new 2 unread
U 1 [email protected] Sun Feb 26 17:47 46/1685 "Logwatch for localhost.localdomain (Linux)"
>N 2 [email protected] Sun Feb 26 18:47 16/696 "Output from your job 2"
&
輸入數字可以查看mail
q鍵退出
at -f file TIME 從某一文件中讀取
batch不需要加時間,用法和at一樣
2、在未來週期性去執行一個任務:
crontab
anacron
crond 屬於服務,在後臺一直運行。其環境變量與用戶不同。
chkconfig --list 查看服務列表
which crond 查看crond根路徑
rpm -qf /usr/sbin/crond 查看crond的安裝包
service crond status 查看crond的狀態
定義環境變量:
PATH=/sbin:/bin:/usr/sbin:/usr/bin
/var/spool/cron/USERNAME 用戶定義的任務計劃
/etc/crontab 系統定義的任務計劃
兩類:
1、用戶cron /var/spool/cron/USERNAME 不需要指定用戶 配置文件有六個字段
2、系統cron /etc/crontab 需要指定用戶 配置文件有七個字段
#vim /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
時間:
min:01-59
hour:00-23
day: 01-31
month: 01-12
day of week: 00-07
4 7 * * * 每天的七點四分 每天任務
10 * * * * 每十分鐘 每小時任務
10 2 3 * * 每月三號兩點十分 每月任務
30 4 * * 6 每週六四點三十分 每週任務
非連續時間點:,
15,45 * * * * 每半小時任務
連續時間點:-
15 8-18 * * * 每小時任務
*/#
*/3 * * * * 每三分鐘執行一次
00-59/3 * * * * 每三分鐘執行一次
crontab
# crontab -e 編輯crontab文件
*/3 * * * * /bin/echo "hello"
# crontab -l 列出crontab文件
# crontab -r 移除crontab文件
# crontab -u USERMANE 編輯特定用戶的crontab文件
*/2 * * * * /sbin/enableppp &> /dev/null
40 21 * * * /sbin/shutdown -h now &> /dev/null
10 3 * * * /bin/tar -jcf /baskup/etc-`date +%F`.tar.bz2 /etc
anacron: 實現檢查過期和未完成的crontab的任務
# vim /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
1 65 cron.daily run-parts /etc/cron.daily
7 70 cron.weekly run-parts /etc/cron.weekly
30 75 cron.monthly run-parts /etc/cron.monthly
注:date 系統時間
clock 硬件時間
hwclock -w 將date寫入clock
-s 將clock寫入date
# crontab -e
*/3 * * * * /sbin/hwclock -s &> /dev/null