計劃任務:bash
at:tcp
at TIMEide
at>spa
提交任務:Ctrl+dorm
做業結果:以郵件形式發送到系統上的當前用戶crontab
[root@localhost ~]# netstat -tnl | grep "25\>"內存
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN it
tcp 0 0 ::1:25 :::* io
查看郵件服務端口25啓動沒有,SMTP服務正常class
讀郵件:mail
q:退出
N:查看第幾封郵件
發郵件:mali USERNAME[@HOSTNAME]
週期性任務:cron
查看運行後臺運行:
# service crond stats
cron 任務有2類:
系統cron:/etc/crontab
用戶cron:定義在/var/spool/cron目錄中與用戶名同名的文件中
每行定義一個獨立的任務:
# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root 將經過電子郵件發送給root用戶
HOME=/ 第四行的HOME變量指定了在執行命令或者腳本時使用的主目錄
# 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
時間點 :週期性任務
username:用戶身份
command:要運行的任務:
注意重點:建議在定義cron任務時!所用到的命令使用絕對路徑,若是是腳本也建議使用絕對路徑,或者自定義一個完整路徑的環境變量
時間點:
分鐘|小時|天|月|周幾
每一年:2 3 4 5 * 每一年5月4號3點2分
每個月:20 18 6 * * 每個月6號18號20分
天天:20 9 * * * 天天9點20分
每小時: 3 * * * * 每小時運行
每分鐘:* * * * * 每分鐘
每週:16 17 * * 3 每週
時間表示法 :
1:每一個時間位都使用可用的有效取值範圍的值,* 表示:使用全部有效取值
17 * * * * /bin/echo "hello" 每小時17分時運行這個命令
8 9 * * * /bin/echo "hello" 天天運行9點8分這個命令
16 17 * * 3 /bin/echo "hello" 每週3的17點16分運行這個命令
2: */#:在對應的時間位有效值上每#個時間單位一次
*/3 * * * * /bin/echo "hello" 每3分鐘運行一次
9 */3 * * * /bin/echo "hello" 每3個小時運行一次
3:連續時間點:
40 3 * * 1-5 /bin/echo "hello" 周1到周5 運行一次
4:離散時間點:
30 2 * * 2,4,6 /bin/echo "hello" 每2,4,6 運行一次
任務運行後結果,郵件發送給任務相關用戶
丟棄郵件通知:輸出重定向:
COMMAND > /dev/null
COMMAND &> /dev/null
COMMAND > /dev/null 2>&1
用戶cron 任務的定義:
crontab -l 列出全部已定義任務
crontab -e :打開編輯界面定義任務
crontab -r :清出全部任務
-u USERNAME 用別的用戶創建
-l
-e
-r
# crontab -u USERNAME -e
# crontab -u wskfnso -e
注意:若是是crontab的用戶命令中須要使用%時,須要對其轉義
* * * * * /bin/touch /tmp/testdir/file-$(date +\%F-\%H-\%M-\%S)
* * * * * /bin/touch /tmp/testdir/file-$(date +'%F-%H-%M-%S')
定義任務的文件保存在/var/spool/cron 下
# ll /var/spool/cron/
total 4
-rw-------. 1 root root 30 Nov 12 19:48 root
# cat /var/spool/cron/root
*/2 * * * * /bin/echo "hello"
提醒:若是在crontab的用戶命令中使用%,得轉義爲\%
5 3 * * * /bin/touch ~/testfile_`date +\%Y-\%m-\%d`.txt
在使用單引號後,%也能夠不轉義
5 3 * * * /bin/touch ~/testfile_`date +’%Y-%m-%d‘`.txt
練習:
1、每3分鐘執行一個「echo 「how are you?」」
*/3 * * * * /bin/echo 「how are you?」
2、每週2、4、6備份/etc/目錄至/backup目錄中,備份的文件名以當etc_開頭並跟上當日的日期做爲文件名
0 0 * * 2,4,6 /bin/tar Jcf /back/etc-`date +'%F'`.tar.xz /etc/*
3.天天6,9,12,15,18查看一下系統當前掛載的全部文件系統,並將查看的結果追加至/tmp/mounts.txt文件中
0 6-18/3 * * * /bin/mount >> /tmp/mounts.txt
4.天天每兩小時取當前系統內存空間餘量,將其保存至/stats/memory.txt文件中
20 */2 * * * /bin/grep "^MemFree:" /proc/meminfo >> /stats/memory.txt