注意 全部配置操做必須是root用戶 ,局域網內node21做爲NTP Server,node22,node23做爲NTP Client與服務器進行時鐘同步,ntpd Server,用於和外部公共ntpd同步標準時間,同時做爲內網的Server,ntpd Client,用於與ntpd Server同步時間html
node21 | 192.168.100.21 |
node22 | 192.168.100.22 |
node23 | 192.168.100.23 |
[root@node21 ~]# rpm -qa|grep ntp 若是已安裝顯示 ntp-4.2.6p5-10.el6.centos.x86_64 fontpackages-filesystem-1.41-1.1.el6.noarch ntpdate-4.2.6p5-10.el6.centos.x86_64
在線安裝設置開機啓動ntp服務java
yum -y install ntp #啓動ntp服務 systemctl start ntpd #設置開機啓動服務 systemctl enable ntpd.service
配置前先使用命令:ntpdate -u cn.pool.ntp.org
,同步服務器node
替換成中國時間服務器:http://www.pool.ntp.org/zone/cnlinux
ntpd Server:192.168.100.21 修改/etc/ntp.conf文件,紅色字體是修改的內容shell
# For more information about this file, see the man pages # ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5). driftfile /var/lib/ntp/drift # Permit time synchronization with our time source, but do not # permit the source to query or modify the service on this system. restrict default nomodify notrap nopeer noquery # Permit all access over the loopback interface. This could # be tightened as well, but to do so would effect some of # the administrative functions. restrict 127.0.0.1 restrict ::1 # Hosts on local network are less restricted. #restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap # 容許內網其餘機器同步時間,若是不添加該約束默認容許全部IP訪問本機同步服務 restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap # Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). #server 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburst # 配置和上游標準時間同步 server 210.72.145.44 # 中國國家授時中心 server 133.100.11.8 #日本[福岡大學] server 0.cn.pool.ntp.org server 1.cn.pool.ntp.org server 2.cn.pool.ntp.org server 3.cn.pool.ntp.org # 配置容許上游時間服務器主動修改本機(內網ntp Server)的時間 restrict 210.72.145.44 nomodify notrap noquery restrict 133.100.11.8 nomodify notrap noquery restrict 0.cn.pool.ntp.org nomodify notrap noquery restrict 1.cn.pool.ntp.org nomodify notrap noquery restrict 2.cn.pool.ntp.org nomodify notrap noquery restrict 3.cn.pool.ntp.org nomodify notrap noquery # 確保localhost有足夠權限,使用沒有任何限制關鍵詞的語法。 # 外部時間服務器不可用時,以本地時間做爲時間服務。 # 注意:這裏不能改,必須使用127.127.1.0,不然會致使沒法 #在ntp客戶端運行ntpdate serverIP,出現no server suitable for synchronization found的錯誤。 #在ntp客戶端用ntpdate –d serverIP查看,發現有「Server dropped: strata too high」的錯誤,而且顯示「stratum 16」。而正常狀況下stratum這個值得範圍是「0~15」。 #這是由於NTP server尚未和其自身或者它的server同步上。 #如下的定義是讓NTP Server和其自身保持同步,若是在ntp.conf中定義的server都不可用時,將使用local時間做爲ntp服務提供給ntp客戶端。 #下面這個配置,建議NTP Client關閉,建議NTP Server打開。由於Client若是打開,可能致使NTP自動選擇合適的最近的NTP Server、也就有可能選擇了LOCAL做爲Server進行同步,而不與遠程Server進行同步。 server 127.127.1.0 # local clock fudge 127.127.1.0 stratum 10 #broadcast 192.168.1.255 autokey # broadcast server #broadcastclient # broadcast client #broadcast 224.0.1.1 autokey # multicast server #multicastclient 224.0.1.1 # multicast client #manycastserver 239.255.254.254 # manycast server #manycastclient 239.255.254.254 autokey # manycast client # Enable public key cryptography. #crypto includefile /etc/ntp/crypto/pw # Key file containing the keys and key identifiers used when operating # with symmetric key cryptography. keys /etc/ntp/keys # Specify the key identifiers which are trusted. #trustedkey 4 8 42 # Specify the key identifier to use with the ntpdc utility. #requestkey 8 # Specify the key identifier to use with the ntpq utility. #controlkey 8 # Enable writing of statistics records. #statistics clockstats cryptostats loopstats peerstats # Disable the monitoring facility to prevent amplification attacks using ntpdc # monlist command when default restrict does not include the noquery flag. See # CVE-2013-5211 for more details. # Note: Monitoring will not be disabled with the limited restriction flag. disable monitor
[root@node21 ~]# systemctl restart ntpd
查看網絡中的NTP服務器,同時顯示客戶端和每一個服務器的關係:apache
[root@node21 ~]# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== 210.72.145.44 .INIT. 16 u - 64 0 0.000 0.000 0.000 clock.tl.fukuok .INIT. 16 u - 64 0 0.000 0.000 0.000 gus.buptnet.edu 10.3.8.150 5 u 53 64 7 113.234 -29.011 5.500 cn.ntp.faelix.n 185.134.196.169 2 u 54 64 7 154.859 -67.243 18.652 static-5-103-13 .GPS. 1 u 53 64 7 406.416 -92.420 21.929 *LOCAL(0) .LOCL. 10 l 60 64 7 0.000 0.000 0.000
[root@node21 ~]# ntpstat synchronised to local net at stratum 11 time correct to within 7948 ms polling server every 64 s
[root@node21 ~]# ntpstat unsynchronised time server re-starting polling server every 64 s
[root@node21 ~]# ntpstat synchronised to NTP server (5.103.139.163) at stratum 2 time correct to within 456 ms polling server every 64 s
node22,node23爲客戶端。windows
1)檢查ntp是否安裝,以及是否設置了自啓動,參考ntpd Server的ntp安裝檢查。centos
2)修改/etc/ntp.conf文件,紅色字體是修改的內容:緩存
# For more information about this file, see the man pages # ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5). driftfile /var/lib/ntp/drift # Permit time synchronization with our time source, but do not # permit the source to query or modify the service on this system. restrict default nomodify notrap nopeer noquery # Permit all access over the loopback interface. This could # be tightened as well, but to do so would effect some of # the administrative functions. restrict 127.0.0.1 restrict ::1 # Hosts on local network are less restricted. #restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap # Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). #server 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburst #配置上游時間服務器爲本地的ntpd Server服務器 server 192.168.100.21 # 配置容許上游時間服務器主動修改本機的時間 restrict 192.168.100.21 nomodify notrap noquery #下面這個配置,建議NTP Client關閉,建議NTP Server打開。由於Client若是打開,可能致使NTP自動選擇合適的最近的NTP Server、也就有可能選擇了LOCAL做爲Server進行同步,而不與遠程Server進行同步。 #server 127.127.1.0 # local clock #fudge 127.127.1.0 stratum 10 #broadcast 192.168.1.255 autokey # broadcast server #broadcastclient # broadcast client #broadcast 224.0.1.1 autokey # multicast server #multicastclient 224.0.1.1 # multicast client #manycastserver 239.255.254.254 # manycast server #manycastclient 239.255.254.254 autokey # manycast client # Enable public key cryptography. #crypto includefile /etc/ntp/crypto/pw # Key file containing the keys and key identifiers used when operating # with symmetric key cryptography. keys /etc/ntp/keys # Specify the key identifiers which are trusted. #trustedkey 4 8 42 # Specify the key identifier to use with the ntpdc utility. #requestkey 8 # Specify the key identifier to use with the ntpq utility. #controlkey 8 # Enable writing of statistics records. #statistics clockstats cryptostats loopstats peerstats # Disable the monitoring facility to prevent amplification attacks using ntpdc # monlist command when default restrict does not include the noquery flag. See # CVE-2013-5211 for more details. # Note: Monitoring will not be disabled with the limited restriction flag. disable monitor
[root@node22 ~]# systemctl restart ntpd
[root@node22 ~]# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== node21 LOCAL(0) 11 u 2 64 0 0.000 0.000 0.000
[root@node21 ~]# date Thu May 31 02:11:12 EDT 2018 [root@node21 ~]# date -R Thu, 31 May 2018 02:15:32 -0400 [root@node21 ~]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime cp: overwrite ‘/etc/localtime’? y [root@node21 ~]# date -R Thu, 31 May 2018 14:16:42 +0800 [root@node21 ~]# date Thu May 31 14:16:47 CST 2018
linux 系統則是由 cron (crond) 這個系統服務來控制的。Linux 系統上面本來就有很是多的計劃性工做,所以這個系統服務是默認啓動的。另 外, 因爲使用者本身也能夠設置計劃任務,因此, Linux 系統也提供了使用者控制計劃任務的命令 :crontab 命令。bash
crond 是linux下用來週期性的執行某種任務或等待處理某些事件的一個守護進程,與windows下的計劃任務相似,當安裝完成操做系統後,默認會安裝此服務 工具,而且會自動啓動crond進程,crond進程每分鐘會按期檢查是否有要執行的任務,若是有要執行的任務,則自動執行該任務。
Linux下的任務調度分爲兩類,系統任務調度和用戶任務調度。
系統任務調度:系統週期性所要執行的工做,好比寫緩存數據到硬盤、日誌清理等。在/etc目錄下有一個crontab文件,這個就是系統任務調度的配置文件。
/etc/crontab文件包括下面幾行:
cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=HOME=/
# run-parts
51 * * * * root run-parts /etc/cron.hourly
24 7 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
前 四行是用來配置crond任務運行的環境變量,第一行SHELL變量指定了系統要使用哪一個shell,這裏是bash,第二行PATH變量指定了系統執行 命令的路徑,第三行MAILTO變量指定了crond的任務執行信息將經過電子郵件發送給root用戶,若是MAILTO變量的值爲空,則表示不發送任務 執行信息給用戶,第四行的HOME變量指定了在執行命令或者腳本時使用的主目錄。第六至九行表示的含義將在下個小節詳細講述。這裏不在多說。
用戶任務調度:用戶按期要執行的工做,好比用戶數據備份、定時郵件提醒等。用戶可使用 crontab 工具來定製本身的計劃任務。全部用戶定義的crontab 文件都被保存在 /var/spool/cron目錄中。其文件名與用戶名一致。
使用者權限文件:
文件:
/etc/cron.deny
說明:
該文件中所列用戶不容許使用crontab命令
文件:
/etc/cron.allow
說明:
該文件中所列用戶容許使用crontab命令
文件:
/var/spool/cron/
說明:
全部用戶crontab文件存放的目錄,以用戶名命名
crontab文件的含義:
用戶所創建的crontab文件中,每一行都表明一項任務,每行的每一個字段表明一項設置,它的格式共分爲六個字段,前五段是時間設定段,第六段是要執行的命令段,格式以下:
minute hour day month week command
其中:
minute: 表示分鐘,能夠是從0到59之間的任何整數。
hour:表示小時,能夠是從0到23之間的任何整數。
day:表示日期,能夠是從1到31之間的任何整數。
month:表示月份,能夠是從1到12之間的任何整數。
week:表示星期幾,能夠是從0到7之間的任何整數,這裏的0或7表明星期日。
command:要執行的命令,能夠是系統命令,也能夠是本身編寫的腳本文件。
在以上各個字段中,還可使用如下特殊字符:
星號(*):表明全部可能的值,例如month字段若是是星號,則表示在知足其它字段的制約條件後每個月都執行該命令操做。
逗號(,):能夠用逗號隔開的值指定一個列表範圍,例如,「1,2,5,7,8,9」
中槓(-):能夠用整數之間的中槓表示一個整數範圍,例如「2-6」表示「2,3,4,5,6」
正斜線(/):能夠用正斜線指定時間的間隔頻率,例如「0-23/2」表示每兩小時執行一次。同時正斜線能夠和星號一塊兒使用,例如*/10,若是用在minute字段,表示每十分鐘執行一次。
安裝crontab:
yum install crontabs
服務操做說明:
/sbin/service crond start //啓動服務
/sbin/service crond stop //關閉服務
/sbin/service crond restart //重啓服務
/sbin/service crond reload //從新載入配置
/sbin/service crond status //啓動服務
查看crontab服務是否已設置爲開機啓動,執行命令:
ntsysv
加入開機自動啓動:
chkconfig –level 35 crond on
1.命令格式:
crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
2.命令功能:
經過crontab 命令,咱們能夠在固定的間隔時間執行指定的系統指令或 shell script腳本。時間間隔的單位能夠是分鐘、小時、日、月、周及以上的任意組合。這個命令很是設合週期性的日誌分析或數據備份等工做。
3.命令參數:
-u user:用來設定某個用戶的crontab服務,例如,「-u ixdba」表示設定ixdba用戶的crontab服務,此參數通常有root用戶來運行。
file:file是命令文件的名字,表示將file作爲crontab的任務列表文件並載入crontab。若是在命令行中沒有指定這個文件,crontab命令將接受標準輸入(鍵盤)上鍵入的命令,並將它們載入crontab。
-e:編輯某個用戶的crontab文件內容。若是不指定用戶,則表示編輯當前用戶的crontab文件。
-l:顯示某個用戶的crontab文件內容,若是不指定用戶,則表示顯示當前用戶的crontab文件內容。
-r:從/var/spool/cron目錄中刪除某個用戶的crontab文件,若是不指定用戶,則默認刪除當前用戶的crontab文件。
-i:在刪除用戶的crontab文件時給確認提示。
4.經常使用方法:
1). 建立一個新的crontab文件
在 考慮向cron進程提交一個crontab文件以前,首先要作的一件事情就是設置環境變量EDITOR。cron進程根據它來肯定使用哪一個編輯器編輯 crontab文件。9 9 %的UNIX和LINUX用戶都使用vi,若是你也是這樣,那麼你就編輯$ HOME目錄下的. profile文件,在其 中加入這樣一行:
EDITOR=vi; export EDITOR
而後保存並退出。不妨建立一個名爲<user> cron的文件,其中<user>是用戶名,例如, davecron。在該文件中加入以下的內容。
# (put your own initials here)echo the date to the console every
# 15minutes between 6pm and 6am
0,15,30,45 18-06 * * * /bin/echo ‘date’ > /dev/console
保存並退出。確信前面5個域用空格分隔。
在 上面的例子中,系統將每隔1 5分鐘向控制檯輸出一次當前時間。若是系統崩潰或掛起,從最後所顯示的時間就能夠一眼看出系統是什麼時間中止工做的。在有些 系統中,用tty1來表示控制檯,能夠根據實際狀況對上面的例子進行相應的修改。爲了提交你剛剛建立的crontab文件,能夠把這個新建立的文件做爲 cron命令的參數:
$ crontab davecron
如今該文件已經提交給cron進程,它將每隔1 5分鐘運行一次。
同時,新建立文件的一個副本已經被放在/var/spool/cron目錄中,文件名就是用戶名(即dave)。
2). 列出crontab文件
爲了列出crontab文件,能夠用:
$ crontab -l
0,15,30,45,18-06 * * * /bin/echo `date` > dev/tty1
你將會看到和上面相似的內容。可使用這種方法在$ H O M E目錄中對crontab文件作一備份:
$ crontab -l > $HOME/mycron
這樣,一旦不當心誤刪了crontab文件,能夠用上一節所講述的方法迅速恢復。
3). 編輯crontab文件
若是但願添加、刪除或編輯crontab文件中的條目,而E D I TO R環境變量又設置爲v i,那麼就能夠用v i來編輯crontab文件,相應的命令爲:
$ crontab -e
能夠像使用v i編輯其餘任何文件那樣修改crontab文件並退出。若是修改了某些條目或添加了新的條目,那麼在保存該文件時, c r o n會對其進行必要的完整性檢查。若是其中的某個域出現了超出容許範圍的值,它會提示你。
咱們在編輯crontab文件時,沒準會加入新的條目。例如,加入下面的一條:
# DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month
30 3 1,7,14,21,26 * * /bin/find -name 「core’ -exec rm {} \;
如今保存並退出。最好在crontab文件的每個條目之上加入一條註釋,這樣就能夠知道它的功能、運行時間,更爲重要的是,知道這是哪位用戶的做業。
如今讓咱們使用前面講過的crontab -l命令列出它的所有信息:
$ crontab -l
# (crondave installed on Tue May 4 13:07:43 1999)
# DT:ech the date to the console every 30 minites
0,15,30,45 18-06 * * * /bin/echo `date` > /dev/tty1
# DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month
30 3 1,7,14,21,26 * * /bin/find -name 「core’ -exec rm {} \;
要刪除crontab文件,能夠用:
$ crontab -r
5). 恢復丟失的crontab文件
若是不當心誤刪了crontab文件,假設你在本身的$ H O M E目錄下還有一個備份,那麼能夠將其拷貝到/var/spool/cron/<username>,其中<username>是用戶名。若是因爲權限問題沒法完成拷貝,能夠用:
$ crontab <filename>
其中,<filename>是你在$ H O M E目錄中副本的文件名。
我建議你在本身的$ H O M E目錄中保存一個該文件的副本。我就有過相似的經歷,有數次誤刪了crontab文件(由於r鍵緊挨在e鍵的右邊)。這就是爲何有些系統文檔建議不要直接編輯crontab文件,而是編輯該文件的一個副本,而後從新提交新的文件。
有些crontab的變體有些怪異,因此在使用crontab命令時要格外當心。若是遺漏了任何選項,crontab可能會打開一個空文件,或者看起來像是個空文件。這時敲delete鍵退出,不要按<Ctrl-D>,不然你將丟失crontab文件。
實例1:每1分鐘執行一次command
命令:
* * * * * command
實例2:每小時的第3和第15分鐘執行
命令:
3,15 * * * * command
實例3:在上午8點到11點的第3和第15分鐘執行
命令:
3,15 8-11 * * * command
實例4:每隔兩天的上午8點到11點的第3和第15分鐘執行
命令:
3,15 8-11 */2 * * command
實例5:每一個星期一的上午8點到11點的第3和第15分鐘執行
命令:
3,15 8-11 * * 1 command
實例6:每晚的21:30重啓smb
命令:
30 21 * * * /etc/init.d/smb restart
實例7:每個月一、十、22日的4 : 45重啓smb
命令:
45 4 1,10,22 * * /etc/init.d/smb restart
實例8:每週6、週日的1 : 10重啓smb
命令:
10 1 * * 6,0 /etc/init.d/smb restart
實例9:天天18 : 00至23 : 00之間每隔30分鐘重啓smb
命令:
0,30 18-23 * * * /etc/init.d/smb restart
實例10:每星期六的晚上11 : 00 pm重啓smb
命令:
0 23 * * 6 /etc/init.d/smb restart
實例11:每一小時重啓smb
命令:
* */1 * * * /etc/init.d/smb restart
實例12:晚上11點到早上7點之間,每隔一小時重啓smb
命令:
* 23-7/1 * * * /etc/init.d/smb restart
實例13:每個月的4號與每週一到週三的11點重啓smb
命令:
0 11 4 * mon-wed /etc/init.d/smb restart
實例14:一月一號的4點重啓smb
命令:
0 4 1 jan * /etc/init.d/smb restart
實例15:每小時執行/etc/cron.hourly目錄內的腳本
命令:
01 * * * * root run-parts /etc/cron.hourly
說明:
run-parts這個參數了,若是去掉這個參數的話,後面就能夠寫要運行的某個腳本名,而不是目錄名了
注意環境變量問題
有時咱們建立了一個crontab,可是這個任務卻沒法自動執行,而手動執行這個任務卻沒有問題,這種狀況通常是因爲在crontab文件中沒有配置環境變量引發的。
在 crontab文件中定義多個調度任務時,須要特別注意的一個問題就是環境變量的設置,由於咱們手動執行某個任務時,是在當前shell環境下進行的,程 序固然能找到環境變量,而系統自動執行任務調度時,是不會加載任何環境變量的,所以,就須要在crontab文件中指定任務運行所需的全部環境變量,這 樣,系統執行任務調度時就沒有問題了。
不要假定cron知道所須要的特殊環境,它其實並不知道。因此你要保證在shelll腳本中提供全部必要的路徑和環境變量,除了一些自動設置的全局變量。因此注意以下3點:
1)腳本中涉及文件路徑時寫全局路徑;
2)腳本執行要用到java或其餘環境變量時,經過source命令引入環境變量,如:
cat start_cbp.sh
#!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &
3)當手動執行腳本OK,可是crontab死活不執行時。這時必須大膽懷疑是環境變量惹的禍,並能夠嘗試在crontab中直接引入環境變量解決問題。如:
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh
注意清理系統用戶的郵件日誌
每條任務調度執行完畢,系統都會將任務輸出信息經過電子郵件的形式發送給當前系統用戶,這樣日積月累,日誌信息會很是大,可能會影響系統的正常運行,所以,將每條任務進行重定向處理很是重要。
例如,能夠在crontab文件中設置以下形式,忽略日誌輸出:
0 */3 * * * /usr/local/apache2/apachectl restart >/dev/null 2>&1
「/dev/null 2>&1」表示先將標準輸出重定向到/dev/null,而後將標準錯誤重定向到標準輸出,因爲標準輸出已經重定向到了/dev/null,所以標準錯誤也會重定向到/dev/null,這樣日誌輸出問題就解決了。
系統級任務調度與用戶級任務調度
系 統級任務調度主要完成系統的一些維護操做,用戶級任務調度主要完成用戶自定義的一些任務,能夠將用戶級任務調度放到系統級任務調度來完成(不建議這麼 作),可是反過來卻不行,root用戶的任務調度操做能夠經過「crontab –uroot –e」來設置,也能夠將調度任務直接寫入/etc /crontab文件,須要注意的是,若是要定義一個定時重啓系統的任務,就必須將任務放到/etc/crontab文件,即便在root用戶下建立一個 定時重啓系統的任務也是無效的。
其餘注意事項
新建立的cron job,不會立刻執行,至少要過2分鐘才執行。若是重啓cron則立刻執行。
當crontab忽然失效時,能夠嘗試/etc/init.d/crond restart解決問題。或者查看日誌看某個job有沒有執行/報錯tail -f /var/log/cron。
千萬別亂運行crontab -r。它從Crontab目錄(/var/spool/cron)中刪除用戶的Crontab文件。刪除了該用戶的全部crontab都沒了。
在crontab中%是有特殊含義的,表示換行的意思。若是要用的話必須進行轉義\%,如常常用的date ‘+%Y%m%d’在crontab裏是不會執行的,應該換成date ‘+\%Y\%m\%d’。