一次性任務計劃:at,batch
周期性任務計劃:cron
at:簡單用法
at TIME
at>
提交任務:^c+d
作業結果:以郵件形式發送系統上的當前用戶
郵件收發:
服務啟動與否狀態查看命令:
netstat -tnl |grep ":25"
默認收發郵件僅在本機上的用戶間進行,且只能通過回環接口上的地址進行。
# mail
q:退出
N:查看第N封郵件
發郵件給指定用戶(系統內):
# mail USERNAME[@HOSTNAME]
-s "SUBJECT" 主題
echo | mail 也可以使用管道
TIME的格式
精確時間:
HH:MM
模糊時間:
now+#UNIT
noon , midnight,teatime, tomorrow
作業隊列查看:
at -l, atq
刪除尚未運行的作業:
at -d [JOB_NUM], at rm
也可以 把at要執行的所有任務放置於文件中,讓at讀取此文件作為要運行的任務(適用量大的作業)
at -f /PATH/TO/SOMEFILE TIME
batch:無須指定時間,會自動在將來的某個系統資源較空閒的時間點運行
周期性任務計劃:cron
依賴於後台服務,查看運行狀態
service crond status CentOS {5,6}版本查看命令,如有以下輸出結果則可使用cron
crond (pid 1680) is running
cron任務有兩類:
系統cron: /etc/crontab
用戶cron: 定義在/var/spool/cron/目錄中與用戶名同名的文件中
每行定義一個獨立的任務:
查看/etc/crontab後有以下信息
[root@localhost ~]# 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
由以下3部分組成:
時間點(周期性任務)
user-name:用戶身份
command:要運行的任務
注意:建議在定義cron任務時,所用到的命令使用絕對路徑,或自定一個擁有完整路徑的環境變量。
時間表示法:
1.每個時間為都應該使用期可用的有效取值范圍內的值,*用於表示使用期所有有效取值,
2. */#:在對應的時間位有效取值上每# 個時間單位一次
注意:定義分鐘時的取值范圍需能被60整除
3. 連續時間點: -
4.離散時間點:,
任務運行後的結果:郵件發送給任務相關用戶:
丟棄郵件通知:輸出重定向
COMMAND > /dev/null
COMMAND &> /dev/null
COMMAND > /dev/null 2>&1
/dev/null:軟件模擬出的設備, bit bucket,數據黑洞
用戶cron任務的定義:
crontab命令:
-l:列出已定義的所有任務
-e:打開編輯器
-r:remove,移除所有任務
-u user: 不是管理自己的cron任務,而是指定的目標用戶的cron任務;僅root擁有管理其它用戶的cron任務的權限;默認管理自己的
注意:crontab文件內的%需轉義,或者用單引號對其引用。
作業::
每周一到周六的凌晨3點20分,運行cp命令對/etc/目錄進行歸檔另存,存儲位置為/backups/etc-YYYY-MM-DD
20 3 * * 1-6 /bin/cp /etc /backups/etc-$(date+'%Y-%m-%d')
[root@localhost ~]# mkdir -p /backups/etc
[root@localhost ~]# crontab e
[root@localhost etc]# crontab -l
20 3 * * 1-6 /bin/cp /etc /backups/etc-$(date +'%Y-%m-%d')
每周日凌晨2點30分,運行cp命令對/etc/fstab文件進行備份,存儲位置為/backup/fstab-YYYY-MM-DD-hh-mm-ss
30 2 * * 7 /bin/cp /etc/fstab /backup/fstab-$(date +'%Y-%m-%d-%H-%M-%S')
[root@localhost etc]# mkdir -p /backups/fstab
[root@localhost etc]# crontab e
[root@localhost etc]# crontab l
30 2 * * 7 /bin/cp /etc/fstab /backup/fstab-$(date +'%Y-%m-%d-%H-%M-%S')
每天晚上12點,取得/proc/meminfo文件中所有以S或M開頭的行,追加至/statistics/meminfo.txt文件中,且每天的消息之前,要加上類似===============分隔線
6 0 * * * /bin/egrep /proc/meminfo "^[S,M].*" >> /statistics/meminfo.txt && echo ========================== >> /statistics/meminfo.txt
[root@localhost etc]# mkdir -p /backups/fstab
[root@localhost statistics]# crontab e
[root@localhost statistics]# crontab -l
6 0 * * * /bin/egrep /proc/meminfo "^[S,M].*" >> /statistics/meminfo.txt && echo ========================== >> /statistics/meminfo.txt