在Linux中,可以使用at功能調度任務在指定的時間運行一次,或使用crontab功能調度作業定期運行。
1. 一次性執行命令: at [-f file] [-mldvc] TIME
有時候,需要只運行某任務一次而不是定期運行。爲此,應該使用at命令。
1.1 at的常用選項:
-f file: 可以運行從指定的文件讀取的命令 -m: 執行結果以郵件方式發送給任務發起者 -l: at -l 相當於atq, 列出系統所有at任務 -d JOB_ID:at -d 相當於atrm, 刪除尚未執行的任務 -v: 顯示運行作業的時間 -c JOB_ID : 將任務內容顯示到屏幕
1.2 TIME:時間格式
1.3 at命令使用
當執行at TIME 命令是會進入所謂的at shell環境,可輸入多重命令等待執行,以Ctrl+d結束,會出現<EOT>字樣。
例如,在5分鐘後重啓系統 # at now+5min at> /bin/sync at> /bin/sync at> /sbin/reboot -h now at> <EOT> job 3 at 2014-01-03 05:19
2. 週期性執行命令:crontab
以一定的時間間隔運行任務需要使用cron服務進行管理,它由crond
守護進程和一組表(描述執行哪些操作和採用什麼樣的頻率)組成。這個守護進程每分鐘喚醒一次,並通過檢查 crontab 判斷需要做什麼。用戶使用crontab命令管理 crontab。crond守護進程常常是在系統啓動時由 init 進程啓動的。
而linux任務調度的工作主要分爲以下兩類:
系統執行的工作:系統週期性所要執行的工作,如備份系統數據、清理緩存。配置文件位於/etc/crontab。
個人執行的工作:某個用戶定期要做的工作,如每隔10分鐘檢查郵件服務器是否有新信,這些工作可由每個用戶自行設置。配置文件位於/var/spool/cron/USERNAME
2.1 crontab的常用選項
-f file: 可以運行從指定的文件讀取的命令 -m: 執行結果以郵件方式發送給任務發起者 -l: at -l 相當於atq, 列出系統所有at任務 -d JOB_ID:at -d 相當於atrm, 刪除尚未執行的任務 -v: 顯示運行作業的時間 -c JOB_ID : 將任務內容顯示到屏幕
2.2 如何編輯crontab
使用crontab命令和-e(表示 “edit”)選項創建 crontab。這會打開vi編輯器.
當使用者爲系統cron時,需要下列7個字段。而當使用者爲用戶cron時,只需6個字段,與系統cron相比,無需指定用戶身份(user-name)
# 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
-: 連續取值:17 8-20/3 * * * root cat /etc/fstab 8-20點每3小時一次
2.4 系統cron的配置
# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/
2.4.1 PATH的定義:
2.4.2 如果希望拒收郵件
1、每5分鐘執行一次cat /etc/inittab命令; */5 * * * * root cat /etc/inittab 2、每週1,3,5執行備份/etc目錄; 2 3 * * 1,3,5 root tar -Jcf /backup/etc-`date '+%F'`.tar.xz /etc/* 3、每天中午12、13、14點,每5分鐘查看一次當前系統掛載的所有文件系統,將信息保存至/stats/mounts.txt文件中; */5 12-14 * * * mount >> /stats/mounts.txt 4、每週末上午9點至下午18點,每30分鐘取得一次當前系統的內存使用信息,並將其保存至/stats/memory.txt文件中; 2,32 9-18 * * 6,7 free >> /stats/memory.txt 5. 每週一至週五3點鐘,在目錄/home中,查找文件名爲*.txt的文件,並刪除5天前的文件。 00 03 * * 1-5 find /home "*.txt" -mtime +5 -exec rm -f {} /;