1. 程式人生 > >Linux學習之九-Linux系統定時任務

Linux學習之九-Linux系統定時任務

天下 郵件服務 kcon 完成 zuoye p s 特殊 command nta

Linux系統定時任務

在一些實際工作中需要機器在某個時間自動執行某個任務,不需要人為在此時刻參與,可以建立一個定時任務。

  1. 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 ~]#

  1. 定時任務的寫法

crontab -e 編輯定時任務

crontab -l 查看定時任務

* * * * * cmd

minute hour day month week command

分 時 日 月 周 + 執行的命令

*/ 表示間隔

, 表示和

  • 表示多少到多少
  1. 定時任務的取值範圍,可以使用命令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)

  1. 註意事項

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系統定時任務