1. 程式人生 > >定時任務時間同步三部曲

定時任務時間同步三部曲

定時任務時間同步三部曲

第一部分:時間同步

1.安裝 ntpdate

yum -y install ntpdate

2.時間同步國際ntp時間地址

ntpdate pool.ntp.org
hwclock  -w

3.計劃任務

crontab -e
5 22 * * 0 /usr/sbin/ntpdate pool.ntp.org
5 23 * * 0 /sbin/clock -w

錯誤的配置(原因在後文中解釋)

crontab -e
5 22 * * 0 ntpdate pool.ntp.org
5 23 * * 0 clock -w

第二部分:計劃任務時間格式

1、基本格式

crontab內的基本編輯格式如下

* * * * * root run-parts command
分 時 日 月 周   命令
第1列表示分鐘159 每分鐘用*或者 */1表示
第2列表示小時1230表示0點)
第3列表示日期1314列表示月份1125列標識號星期060表示星期天)
第6列要執行的命令
root表示以root使用者身份來執行
  • run-parts表示後面跟著的是一個資料夾,要執行的是該資料夾下的所有指令碼
  • 整數間的連字號(-)表示整數列,例如1-4意思是整數1,2,3,4
  • 符號“/”指定步進設定。如0-59/2定義每兩分鐘執行一次。步進值也可用星號表示。如*/3用來執行每三個月份執行指定任務。

2、檢測時間

基本上,cron服務的最低檢測時間單位是分鐘,所以cron會每分鐘讀取一次/etc/crontab與/var/spool/cron中的資料內容,因此,只要您編輯完/etc/crontab檔案並且儲存之後,crontab時設定就會自動執行。

指令形式:

01   * * * * test mail -s test test < /home/test/test/test.txt

目錄形式:

*/5   *  *  *  * root run-parts /root/runcron

建立一個/root/runcron目錄,將每隔5分鐘執行一次的可執行檔案都寫到該目錄下,就可以讓系統每5分鐘執行一次該目錄下的所有可執行檔案。

如果每個流程都在同一時間啟動,那麼在某個時段,系統會非常的繁忙,所以這時必須分別設定。可以這樣做:

1,6,11,16,21,26,31,36,41,46,51,56 * * * * root …………   // 省略號代表命令
2,7,12,17,22,27,32,37,42,47,52,57 * * * * root ………… 
3,8,13,18,23,28,33,38,43,48,53,58 * * * * root ………… 
4,9,14,19,24,29,34,39,44,49,54,59 * * * * root ………… 

注意,要用","分隔時,不要帶有空格。如此一來,則可以將每5分鐘工作的流程分別安排在不同的時刻進行。

第三部分:計劃任務裡執行更新時間出錯

crontab -e裡的配置

5 22 * * * ntpdate pool.ntp.org

1、再檢視/var/log/cron日誌

Sep 16 22:05:01 web1 CROND[10087]: (root) CMD (ntpdate pool.ntp.org >> /var/log/ntpdate.log)
Sep 16 22:05:01 web1 CROND[10086]: (root) MAIL (mailed 36 bytes of output but got status 0x004b#012)

說明mail報錯。linux系統沒有安裝mail命令。那就是postfix服務的問題

2、檢視服務執行狀態

service crond status
crond (pid  1124) 正在執行...

service postfix status      # postfix有問題
master 已停

檢視/var/log/maillog

Sep 16 22:05:01 dg2 postfix/sendmail[7611]: fatal: parameter inet_interfaces: no local interface found for ::1

從時間上看,確實是這個問題。問題找到了,需要修改postfix的配置

3、修改方法

  1. open /etc/postfix/main.cf
  2. comment out inet_interfaces: all
  3. add inet_protocol: ipv4

4、檢視郵件資訊

/var/spool/mail/root裡發現定時任務依舊沒有執行成功

#
# 郵件內容頭省略
#
Message-Id: <20180919052901.[email protected].localdomain>
Date: Wed, 19 Sep 2018 13:29:01 +0800 (CST)

/bin/sh: ntpdate: command not found    # 此處報錯

5、檢視ntpdate的路徑

whereis ntpdate
ntpdate: /usr/sbin/ntpdate /usr/share/man/man8/ntpdate.8.gz

which ntpdate
/usr/sbin/ntpdate

問題找到了,在定時服務中,ntpdate命令要使用全路徑