Linux學習之九-Linux系統定時任務
Linux系統定時任務
在一些實際工作中需要機器在某個時間自動執行某個任務,不需要人為在此時刻參與,可以建立一個定時任務。
- crond 服務是linux下用來周期性的執行某種任務或等待處理某些事件的一個守護進程,與windows下的計劃任務類似,當安裝完成操作系統後,默認會安裝此服務 工具,並且會自動啟動crond進程,crond進程每分鐘會定期檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。
使用命令/etc/init.d/crond status檢查服務是否處於運行狀態,
使用命令/etc/init.d/crond start 啟動定時任務
使用命令chkconfig crond on 設置開機啟動
[root@localhost ~]# /etc/init.d/crond status
crond is stopped
[root@localhost ~]# /etc/init.d/crond start
Starting crond: [ OK ]
[root@localhost ~]# chkconfig crond on
[root@localhost ~]#
- 定時任務的寫法
crontab -e 編輯定時任務
crontab -l 查看定時任務
* * * * * cmd
minute hour day month week command
分 時 日 月 周 + 執行的命令
*/ 表示間隔
, 表示和
- 表示多少到多少
- 定時任務的取值範圍,可以使用命令cat /etc/crontab查看相應配置
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
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
每個時間參數的取值範圍為0-59,0-23,1-31,1-12,0-6(7相當於0)
- 註意事項
a. 定時任務使用命令時最好使用絕對路徑
b. 每個定時任務(腳本等)一定要加註釋(君子協議)
c. 特殊符號需要轉義如:
* * * * * echo "`date +\%F\ \%T`" >>/tmp/time.txt
d. 最好不要讓執行的命令有輸出,如果避免不了有輸出,就定向到空(黑洞)
避免的做法:
*/1 * * * * /usr/sbin/ntpdate ntp5.aliyun.com >/dev/null 2>/dev/null
*/1 * * * * /usr/sbin/ntpdate ntp5.aliyun.com &>/dev/null
標準輸出 1>(默認為標準輸出)
錯誤輸出 2>
黑洞:/dev/null 重定向到黑洞中的內容全部消失
e. 定時任務中嚴禁使用相對路徑
f. 盡量使用crontab -e來添加定時任務
crontab -e定時任務的文件路徑實際就是/var/spool/cron/root可以換在此文件中編輯
原因是:crontab帶語法檢查出現錯誤時會報錯,適合做定時任務測試
g、 註意:定時任務的命令在編輯之前一定要在命令行先測試成功後再用
5、定時任務舉例
1)每隔一分鐘追加輸出重定向1234567到a.txt
*/1 * * * * echo 1234567 >>/tmp/a.txt
[root@localhost ~]# crontab -e
crontab: installing new crontab
[root@localhost ~]# crontab -l
*/1 * * * * echo 1234567 >>/tmp/a.txt
2)每隔兩小時每十分鐘重啟一下sshd服務
10 */2 * * * /etc/init.d/sshd restart
3)每周三下午六點整echo jiaozuoye
00 18 * * 3 echo jiaozuoye
4)每天下午的兩點和四點整echo 京東秒殺
00 14,16 * * * echo "京東秒殺"
5)每年的3月,6月,11月的1-7號的早上八點到晚上八點echo "大酬賓"
00 8-20 1-7 3,6,11 * echo 大酬賓
6)#上課
30 9 * * 0 /oldboy.sh &>/dev/null
方法一:
echo ‘#上課
> 30 9 * * 0 /oldboy.sh &>/dev/null>>/var/spool/cron/root
方法二:
echo -e ‘#上課\n30 9 * * 0 /oldboy.sh &>/dev/null‘ >>/var/spool/cron/root
6、在定時任務的創建過程中,如果系統開啟了postfix郵件服務,則每創建成功一個定時任務都會收到一封郵件
/etc/init.d/postfix start 啟動郵件服務
mail 查看郵件
U 31 Cron Daemon Sun Apr 1 16:05 24/768 "Cr"
U表示未看 最下面可查看郵件數量
輸入數字查看某一封郵件
輸入q退出
mailq 查看未發生的郵件隊列
>/var/spool/mail/root 清空系統郵件
每個用戶的郵件都放在/var/spool/mail下以用戶名命名的目錄下面
博主原創文章,轉載請務必註明出處
Linux學習之九-Linux系統定時任務