時間伺服器: NTP 伺服器及客戶端搭建

来源:https://www.cnblogs.com/ldy-blogs/archive/2018/02/27/8477555.html
-Advertisement-
Play Games

時間伺服器: NTP 伺服器及客戶端搭建 一. NTP 伺服器的安裝與設定 1. NTP 伺服器的安裝與設定前言 2. 所需軟體與軟體結構 3. 主要配置文件 ntp.conf 的處理 4. NTP 的啟動與觀察: ntpstat, ntpq 5. 安全性設定 1.NTP 伺服器的安裝與設定前言 N ...


時間伺服器: NTP 伺服器及客戶端搭建

一. NTP 伺服器的安裝與設定

1. NTP 伺服器的安裝與設定前言

2. 所需軟體與軟體結構

3. 主要配置文件 ntp.conf 的處理

4. NTP 的啟動與觀察: ntpstat, ntpq

5. 安全性設定

1.NTP 伺服器的安裝與設定前言

NTP 伺服器很容易就可以架設成功,不過這個軟體在不同的 distribution 上面可能有不一樣的名稱,要作的其實就是將他安裝起來之後,規定一部上層 NTP 伺服器來同步化你的時間即可啊!如果只是想要進行單部主機的時間同步化,不用架設 NTP ,直接使用 NTP 客戶端軟體即可!

2.所需軟體與軟體結構

*在 CentOS 6.x 上頭,所需要的軟體其實僅有 ntp 這個玩意兒而已,利用 yum install ntp 即可!不過,我們還需要時區相關的數據文件,所以你需要的軟體有:

    ntp: 就是NTP伺服器的主要軟體啦,包括配置文件以及執行檔等等。
    
    tzdata: 軟體名稱為『 Time Zone data 』的縮寫,提供各時區對應的顯示格式。
    
*與時間及 NTP 伺服器設定相關的配置文件與重要數據文件有底下幾個:

    /etc/ntp.conf: 就是NTP伺服器的主要配置文件,也是唯一的一個;
    
    /usr/share/zoneinfo/:由tzdata所提供,為各時區的時間格式對應檔。 例如臺灣地區的時區格式對應檔案在 /usr/share/zoneinfo/Asia/Taipei 就是了,這個目錄裡面的檔案與底下要談的兩個檔案 (clock 與 localtime) 是有關係;
    
    /etc/sysconfig/clock:設定時區與是否使用UTC時間鐘的配置文件。每次開機後Linux會自動的讀取這個檔案來設定自己系統所預設要顯示的時間說!舉個例子來說, 在臺灣地區的本地時間設定中,這個檔案內應該會出現一行『ZONE="Asia/Taipei"』的字樣,這表示時間配置文件案要取用/usr/share/zoneinfo/Asia/Taipei 那個檔案的意思;
    
    /etc/localtime:這個檔案就是『本地端的時間配置文件』,剛剛那個 clock 檔案裡面規定了使用的時間配置文件(ZONE)為/usr/share/zoneinfo/Asia/Taipei,所以說這就是本地端的時間了,此時Linux系統就會將Taipei那個檔案複製一份成為/etc/localtime,所以未來我們的時間顯示就會以Taipei那個時間配置文件案為準;
    
*至於在常用於時間伺服器與修改時間的指令方面,主要有底下這幾個啦:

    /bin/date:用於 Linux 時間 (軟體時鐘) 的修改與顯示的指令;
    
    /sbin/hwclock:用於BIOS時鐘(硬體時鐘)的修改與顯示的指令。這是一個 root 才能執行的指令,因為Linux系統上面BIOS時間與Linux系統時間是分開的,所以使用date這個指令調整了時間之後,還需要使用hwclock才能將修改過後的時間寫入 BIOS 當中;

    /usr/sbin/ntpd:主要提供NTP服務的程式啰!配置文件為/etc/ntp.conf;

    /usr/sbin/ntpdate:用於客戶端的時間校正,如果你沒有要啟用 NTP 而僅想要使用 NTP Client 功能的話,那麼只會用到這個指令而已;

測試用例:

    假設你的筆記本電腦安裝CentOS這套系統,而且選擇的時區為臺灣。現在,你將有一個月的時間要出差到美國的紐約去,你會帶著這個筆電,那麼到了美國之後,時間會不一致啊!你該如何手動的調整時間參數呢?

    解決方法:因為時區數據文件在/usr/share/zoneinfo內,在該目錄內會找到/usr/share/zoneinfo/America/New_York這個時區檔。而時區配置文件在/etc/sysconfig/clock,且目前的時間格式在 /etc/localtime ,所以應該這樣做:
[root@www ~]# date
Thu Jul 28 15:08:39 CST 2011  <==重點是 CST 這個時區喔!

[root@www ~]# vim /etc/sysconfig/clock
ZONE="America/New_York"       <==改的是這裡啦!

[root@www ~]# cp/usr/share/zoneinfo/America/New_York/etc/localtime
[root@www ~]# date
Thu Jul 28 03:09:21 EDT 2011  <==時區與時間都改變了!
這個範例做完之後,記得將這兩個檔案改回.

3.主要配置文件 ntp.conf 的處理

由於 NTP 伺服器的設定需要有上游伺服器的支持才行,假設NTP 伺服器所需要設定的架構如下:

我的上層 NTP 伺服器共有tock.stdtime.gov.tw,tick.stdtime.gov.tw,time.stdtime.gov.tw 三部,其中以tock.stdtime.gov.tw最優先使用(prefer);

不對Internet提供服務,僅允許來自內部網域192.168.100.0/24的查詢而已;

偵測一些 BIOS 時鐘與 Linux 系統時間的差異並寫入/var/lib/ntp/drift 檔案當中。

先讓談一談如何在 ntp.conf 裡面設定許可權控制。利用 restrict 來管理許可權控制在 ntp.conf 檔案內可以利用『 restrict 』來控管許可權,這個參數的設定方式為:

restrict [你的IP] mask [netmask_IP] [parameter]
其中 parameter 的參數主要有底下這些:

ignore:拒絕所有類型的 NTP 聯機;

nomodify:客戶端不能使用ntpc與ntpq這兩支程式來修改伺服器的時間參數, 但客戶端仍可透過這部主機來進行網路校時的;

noquery:客戶端不能夠使用ntpq,ntpc等指令來查詢時間伺服器,等於不提供 NTP 的網路校時啰;

notrap:不提供trap這個遠程事件登錄(remote event logging)的功能。

notrust:拒絕沒有認證的客戶端。
    
    那如果你沒有在 parameter 的地方加上任何參數的話,這表示『該 IP 或網段不受任何限制』的意思,一般來說,我們可以先關閉 NTP 的許可權,然後再一個一個的啟用允許登入的網段。

利用 server 設定上層 NTP 伺服器上層 NTP 伺服器的設定方式為:

server [IP or hostname] [prefer]

在server後端可以接IP或主機名,個人比較喜歡使用 IP 來設定說!至於那個 perfer 表示『優先使用』的伺服器。

以 driftfile 記錄時間差異設定的方式如下:

driftfile [可以被 ntpd 寫入的目錄與檔案]

    因為預設的NTP Server本身的時間計算是依據BIOS的晶元震蕩周期頻率來計算的,但是這個數值與上層 Time Server 不見得會一致,所以 NTP 這個 daemon (ntpd) 會自動的去計算我們自己主機的頻率與上層 Time server 的頻率,並且將兩個頻率的誤差記錄下來,記錄下來的檔案就是在 driftfile 後面接的完整檔名當中了!

關於檔名:

    driftfile 後面接的檔案需要使用完整路徑文件名;該檔案不能是連結檔;該檔案需要設定成ntpd這個daemon可以寫入的許可權。該檔案所記錄的數值單位為:百萬分之一秒 (ppm)。
    driftfile 後面接的檔案會被 ntpd 自動更新,所以他的許可權一定要能夠讓 ntpd 寫入才行。在 CentOS 6.x 預設的 NTP 伺服器中,使用的 ntpd 的 owner 是 ntp ,這部份可以查閱 /etc/sysconfig/ntpd 就可以知道了。

關於keys:

keys [key_file]
    
    除了以 restrict 來限制客戶端的聯機之外,我們也可以透過密鑰系統來給客戶端認證, 如此一來可以讓主機端更放心了。不過在這個章節裡面我們暫不討論這個部分,有興趣的朋友可以參考 ntp-keygen 這個指令的相關說明喔!

根據上面的說明,我們最終可以取得這樣的配置文件案內容:
(底下僅修改部分數據,保留大部分的設定值)

[root@www ~]# vim /etc/ntp.conf

# 1. 先處理許可權方面的問題,包括放行上層伺服器以及開放區網用戶來源:
restrict default kod nomodify notrap nopeer noquery     <==拒絕 IPv4 的用戶
restrict -6 default kod nomodify notrap nopeer noquery  <==拒絕 IPv6 的用戶
restrict 220.130.158.71   <==放行 tock.stdtime.gov.tw 進入本 NTP 伺服器
restrict 59.124.196.83    <==放行 tick.stdtime.gov.tw 進入本 NTP 伺服器
restrict 59.124.196.84    <==放行 time.stdtime.gov.tw 進入本 NTP 伺服器
restrict 127.0.0.1        <==底下兩個是預設值,放行本機來源
restrict -6 ::1
restrict 192.168.100.0 mask 255.255.255.0 nomodify <==放行區網來源

# 2. 設定主機來源,請先將原本的 [0|1|2].centos.pool.ntp.org 的設定批註掉:
server 220.130.158.71 prefer  <==以這部主機為最優先
server 59.124.196.83
server 59.124.196.84

# 3.預設時間差異分析檔案與暫不用到的 keys 等,不需要更動它:
driftfile /var/lib/ntp/drift
keys      /etc/ntp/keys

這樣就設定好了,準備來啟動 NTP 服務。

4.NTP 的啟動與觀察

設定完 ntp.conf 之後就可以啟動 ntp 伺服器了。啟動與觀察的方式如下:

# 1. 啟動 NTP 
[root@www ~]# /etc/init.d/ntpd start
[root@www ~]# chkconfig ntpd on
[root@www ~]# tail /var/log/messages  <==自行檢查看看有無錯誤

# 2. 觀察啟動的埠看看:
[root@www ~]# netstat -tlunp | grep ntp
Proto Recv-Q Send-Q Local Address       Foreign Address  PID/Program name
udp        0      0 192.168.100.254:123 0.0.0.0:*        3492/ntpd
udp        0      0 192.168.1.100:123   0.0.0.0:*        3492/ntpd
udp        0      0 127.0.0.1:123       0.0.0.0:*        3492/ntpd
udp        0      0 0.0.0.0:123         0.0.0.0:*        3492/ntpd
udp        0      0 ::1:123             :::*             3492/ntpd
udp        0      0 :::123              :::*             3492/ntpd
# 主要是 UDP 封包,且在 port 123 這個埠的了。
    這樣就表示我們的 NTP 伺服器已經啟動了,不過要與上層 NTP 伺服器聯機則還需要一些時間, 通常啟動 NTP 後約在 15 分鐘內才會和上層 NTP 伺服器順利連接上。 那要如何確認我們的 NTP 伺服器有順利的更新自己的時間呢?你可以使用底下幾個指令來查閱 (請自行等待數分鐘後再以下列指令查閱):

 [root@www ~]# ntpstat
synchronised to NTP server (220.130.158.71) at stratum 3
   time correct to within 538 ms
   polling server every 128 s

這個指令可以列出我們的NTP伺服器有跟上層聯機否。由上述的輸出結果可以知道,時間有校正約 538 * 10^(-3) 秒,且每隔64秒會主動去更新時間.

[root@www ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*tock.stdtime.go 59.124.196.87    2 u   19  128  377   12.092   -0.953   0.942
+59-124-196-83.H 59.124.196.86    2 u    8  128  377   14.154    7.616   1.533
+59-124-196-84.H 59.124.196.86    2 u    2  128  377   14.524    4.354   1.079

這個 ntpq -p 可以列出目前我們的 NTP 與相關的上層 NTP 的狀態,上頭的幾個欄位的意義為:

remote:亦即是 NTP 主機的 IP 或主機名啰~註意最左邊的符號
如果有『 * 』代表目前正在作用當中的上層 NTP
如果是『 + 』代表也有連上線,而且可作為下一個提供時間更新的候選者。
refid:參考的上一層 NTP 主機的地址
st:就是 stratum 階層啰!
when:幾秒鐘前曾經做過時間同步化更新的動作;
poll:下一次更新在幾秒鐘之後;
reach:已經向上層 NTP 伺服器要求更新的次數
delay:網路傳輸過程當中延遲的時間,單位為 10^(-6) 秒
offset:時間補償的結果,單位與 10^(-3) 秒
jitter:Linux 系統時間與 BIOS 硬體時間的差異時間, 單位為 10^(-6) 秒。

事實上這個輸出的結果告訴我們,時間真的很準了!因為差異都在 0.001 秒以內, 可以符合我們的一般使用了。另外,你也可以檢查一下你的 BIOS 時間與 Linux 系統時間的差異,就是/var/lib/ntp/drift這個檔案的內容,就能瞭解到 Linux 系統時間與 BIOS 硬體時鐘到底差多久?單位為 10^(-6) 秒。

要讓你的 NTP Server/Client 真的能運作,在上述的動作中得註意:

上述的 ntpstat 以及 ntpq -p 的輸出結果中,你的NTP伺服器真的要能夠連結上層NTP才行,否則你的客戶端將無法對你的 NTP 伺服器進行同步更新的,這點很重要!

你的 NTP 伺服器時間不可與上層差異太多。舉例來說,我測試 NTP 伺服器約在 2011/7/28 下午, 如果我的伺服器時間原本是錯誤的 2015/11/11,差了幾年,其實超過不到一年上層伺服器就不會將正確的時間傳給我們! 這時就會造成困擾了!

伺服器防火牆在 UDP port 123 有沒有開,要特別註意!

等待的時間夠不夠長?設定 NTP 等過最久的時間可能會大約是一小時!

5.安全性設定

NTP 伺服器在安全的相關性方面,其實剛剛我們在 /etc/ntp.conf 裡面的 restrict 參數中就已經設定了 NTP 這個 daemon 的服務限制範圍了!不過,在防火牆 iptables 的部分,還是需要開啟聯機監聽的啦!所以,在你的 iptables 規則的 scripts 當中,需要加入這一段 (我是以開放 192.168.100.0/24 這個網域作為範例的!)

[root@www ~]# vim /usr/local/virus/iptables/iptables.allow
iptables -A INPUT -i $EXTIF -p udp -s 192.168.100.0/24 --dport 123 -j ACCEPT

[root@www ~]# /usr/local/virus/iptables/iptables.rule
若還要開放其他的網段或者客戶端主機,修改 /etc/ntpd.conf 以及防火牆機制即可!

二. 客戶端的時間更新方式

1. 客戶端的時間更新方式

2. Linux 手動校時工作: date, hwclock

3. Linux 的網路校時: ntpdate

4. 案例演示

1.客戶端的時間更新方式

    上頭介紹了 NTP 伺服器的安裝與設定,如果我們僅有十部不到的主機時,老實說,實在沒有架設 NTP 伺服器的需求。 只要能夠在你的主機上頭以 NTP 客戶端軟體來進行網路校時就能夠同步化時間了,沒必要時時刻刻進行時間的校正吧, 但是,如果是類似一定要時間同步的叢集電腦群或登錄伺服器群,那就得要使用時間伺服器比較好.

2.Linux 手動校時工作: date, hwclock

軟體時鐘: Linux 自己的系統時間,由 1970/01/01 開始記錄的時間參數
硬體時鐘: 電腦系統在BIOS記錄的實際時間,這也是硬體所記錄的在軟體時鐘方面,我們可以透過date這個指令來進行手動修訂,但如果要修改BIOS 記錄的時間,就得要使用 hwclock 這個指令來寫入才行。

相關的用法如下:

[root@clientlinux ~]# date MMDDhhmmYYYY
選項與參數:
MM:月份
DD:日期
hh:小時
mm:分鐘
YYYY:公元年

# 1. 修改時間成為 1 小時後的時間該如何是好?
[root@clientlinux ~]# date
Thu Jul 28 15:33:38 CST 2011

[root@clientlinux ~]# date 072816332011
Thu Jul 28 16:33:00 CST 2011
# 這樣時間立刻就變成一個小時後了!
 [root@clientlinux ~]# hwclock [-rw]
選項與參數:
-r :亦即 read ,讀出目前 BIOS 內的時間參數;
-w :亦即 write ,將目前的 Linux 系統時間寫入 BIOS 當中啊!

# 2. 查閱 BIOS 時間,並且寫入更改過的時間啰!
[root@clientlinux ~]# date; hwclock -r
Thu Jul 28 16:34:00 CST 2011
Thu 28 Jul 2011 03:34:57 PM CST  -0.317679 seconds
# 看一看,是否剛好差異約一個小時!這就是 BIOS 時間!

[root@clientlinux ~]# hwclock -w; hwclock -r; date
Thu 28 Jul 2011 04:35:12 PM CST  -0.265656 seconds
Thu Jul 28 16:35:11 CST 2011
# 這樣就寫入,所以軟體時鐘與硬體時鐘就同步!

    這樣可以瞭解當我們進行完 Linux 時間的校時後,還需要以 hwclock 來更新 BIOS 的時間,因為每次重新啟動的時候,系統會重新由 BIOS 將時間讀出來,所以,BIOS才是重要的時間依據。

3.Linux 的網路校時

    在 Linux 的環境當中可利用 NTP 的客戶端程式,亦即是 ntpdate 這支程式就能夠進行時間的同步化。 不過你要知道的是,因為 NTP 伺服器本來就會與上層時間伺服器進行時間的同步化, 所以在預設的情況下,NTP 伺服器不可以使用 ntpdate !也就是說 ntpdate 與 ntpd 不能同時啟用的。 所以你不要在 NTP server 上頭執行這個指令,我們就來看看如何處理吧:

 [root@clientlinux ~]# ntpdate [-dv] [NTP IP/hostname]
選項與參數:
-d :進入除錯模式 (debug) ,可以顯示出更多的有效信息。
-v :有較多訊息的顯示。

[root@clientlinux ~]# ntpdate 192.168.100.254
28 Jul 17:19:33 ntpdate[3432]: step time server 192.168.100.254 offset -2428.396146 sec
# 最後面會顯示微調的時間有多少 (offset),因為這部主機時間差很多,所以秒數...

[root@clientlinux ~]# date; hwclock -r
四  7月 28 17:20:27 CST 2011
公元2011年07月28日 (周四) 18時19分26秒  -0.752303 seconds
# 這裡還得 hwclock -w 寫入 BIOS 時間才行!

[root@clientlinux ~]# vim /etc/crontab
# 加入這一行去!
10 5 * * * root (/usr/sbin/ntpdate tock.stdtime.gov.tw && /sbin/hwclock -w) &> /dev/null
    使用 crontab 之後,每天 5:10 Linux 系統就會自動的進行網路校時啰!相當的簡易,不過,這個方式僅適合不要啟動 NTP 的情況。如果你的機器數量太多了,那麼客戶端最好也啟動一下 NTP 服務!透過 NTP 去主動的更新時間吧!如何達成這個動作呢?也很簡單啊,修改 /etc/ntp.conf 即可:

[root@clientlinux ~]# ntpdate 192.168.100.254
# 由於 ntpd 的 server/client 之間的時間誤差不允許超過 1000 秒,
# 因此你得先手動進行時間同步,然後再設定與啟動時間伺服器。

[root@clientlinux ~]# vim /etc/ntp.conf
#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org
restrict 192.168.100.254  <==放行伺服器來源!
server 192.168.100.254    <==這就是伺服器!
# 很簡單,就是將原本的 server 項目批註,加入我們要的伺服器即可

[root@clientlinux ~]# /etc/init.d/ntpd start
[root@clientlinux ~]# chkconfig ntpd on

    然後取消掉crontab的更新程式,這樣你的client電腦就會主動的到NTP伺服器去更新。不過針對客戶端來說,我還是比較習慣使用crontab的方式來處理就是了,這種方式同樣很通用,效果也不錯。

4.案例演示

    讓我們來做個實際演練,在練習之前,請將伺服器的 NFS 設定數據都清除,但是保留 rpcbind 不可關閉。至於客戶端的環境下, 先關閉 autofs 以及取消之前在 /etc/rc.d/rc.local 裡面寫入的開機自動掛載項目。同時刪除 /home/nfs 目錄呦! 接下來請看看我們要處理的環境為何:

模擬的環境狀態中,伺服器端的想法如下:

假設伺服器的 IP 為 192.168.100.254 這一部;

/tmp 分享為可擦寫,並且不限制使用者身份的方式,分享給所有 192.168.100.0/24 這個網域中的所有電腦;

/home/nfs 分享的屬性為只讀,可提供除了網域內的工作站外,向 Internet 亦提供數據內容;

/home/upload 做為 192.168.100.0/24 這個網域的數據上傳目錄,其中,這個 /home/upload 的使用者及所屬群組為 nfs-upload 這個名字,他的 UID 與 GID 均為 210;

/home/andy 這個目錄僅分享給 192.168.100.10 這部主機,以提供該主機上面 andy 這個使用者來使用,也就是說, andy 在 192.168.100.10 及 192.168.100.254 均有賬號,且賬號均為 andy ,所以預計開放 /home/andy 給 andy 使用他的家目錄.

伺服器端設定的實地演練:
首先,就是要建立 /etc/exports 這個檔案的內容.

[root@www ~]# vim /etc/exports
/tmp         192.168.100.0/24(rw,no_root_squash)
/home/nfs    192.168.100.0/24(ro)  *(ro,all_squash)
/home/upload 192.168.100.0/24(rw,all_squash,anonuid=210,anongid=210)
/home/andy   192.168.100.10(rw)

再建立每個對應的目錄的實際 Linux 許可權,我們一個一個來看:

# 1. /tmp
[root@www ~]# ll -d /tmp
drwxrwxrwt. 12 root root 4096 2011-07-27 23:49 /tmp

# 2. /home/nfs
[root@www ~]# mkdir -p /home/nfs
[root@www ~]# chmod 755 -R /home/nfs
# 修改較為嚴格的檔案許可權將目錄與檔案設定成只讀!不能寫入的狀態,會更保險一點!

# 3. /home/upload
[root@www ~]# groupadd -g 210 nfs-upload
[root@www ~]# useradd -g 210 -u 210 -M nfs-upload
# 先建立對應的賬號與組名及 UID 喔!
[root@www ~]# mkdir -p /home/upload
[root@www ~]# chown -R nfs-upload:nfs-upload /home/upload
# 修改擁有者!如此,則用戶與目錄的許可權都設定妥當啰!

# 4. /home/andy
[root@www ~]# useradd andy
[root@www ~]# ll -d /home/andy
drwx------. 4 andy andy 4096 2011-07-28 00:15 /home/andy

這樣一來,許可權的問題大概就可以解決了!

重新啟動 nfs 服務:

[root@www ~]# /etc/init.d/nfs restart

在 192.168.100.10 這部機器上面演練一下:

# 1. 確認遠程伺服器的可用目錄:
[root@clientlinux ~]# showmount -e 192.168.100.254
Export list for 192.168.100.254:
/home/andy   192.168.100.10
/home/upload 192.168.100.0/24
/home/nfs    (everyone)
/tmp         192.168.100.0/24

# 2. 建立掛載點:
[root@clientlinux ~]# mkdir -p /mnt/{tmp,nfs,upload,andy}

# 3. 實際掛載:
[root@clientlinux ~]# mount -t nfs 192.168.100.254:/tmp         /mnt/tmp
[root@clientlinux ~]# mount -t nfs 192.168.100.254:/home/nfs    /mnt/nfs
[root@clientlinux ~]# mount -t nfs 192.168.100.254:/home/upload /mnt/upload
[root@clientlinux ~]# mount -t nfs 192.168.100.254:/home/andy   /mnt/andy

整個步驟大致上就是這樣.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 上一篇中,老周給大伙伴們扯了有關 ASP.NET Core 中異常處理的簡單方法。按照老周的優良作風,我們應該順著這個思路繼續挖掘。 本文老周就不自量力地介紹一下如何使用 MVC Filter 來處理異常。MVC 模型(當然適用於 Razor Page 、Web API 模型)可以用一系列的 Fil ...
  • //簡單工廠,適合具體實現不同,例如根據配置文件實例化不同的資料庫,不同的語言版本. #region 定義基類(屬性和功能) public class Operation { private double numberA = 0; public double NumberA { get { retu ...
  • 簡述 在公司內部搭建內部視頻學習網站,經過對比選擇了wordpress進行站點搭建。但是在上傳視頻遭遇到了各種問題,特將此處理過程進行記錄。 原因排查 1.上傳一個十幾兆mp4的文件上傳進度到達百分之百,會媒體提示http錯誤 2.剛開始懷疑是PHP、Nginx的上傳大小限制了。但是查看PHP、Ng ...
  • 為了做集群測試,在每台機器上裝了3個tomcat,每次發佈項目的時候都要反覆敲一些命令,重啟tomcat之前先檢查tomcat進程有沒有停掉,沒有還要手動kill該進程。 發佈次數多了,操作就比較繁瑣了,索性寫個腳本一鍵發佈,省時省力^_^。 把deploy.sh和restart.sh分別拷貝到3個 ...
  • 刪除文件需要用到rm命令,但刪除目錄需要添加兩個參數: -r 向下遞歸,不管多少級目錄都刪除 -f 強行刪除,不做提示 ...
  • `Centos7+` 64bit; 1.7.12 1.安裝依賴 yum y install gcc gcc c++ wget net tools pcre devel zlib devel openssl devel 2.下載並解壓安裝包 進入常用文件夾 cd /usr/local/src/ 下載源 ...
  • 1.下載jdk1.8的tar cd /usr/local/src 切換到該目錄下 wget url 下載jdk8的tar包 2.下載完成後解壓tar包 tar zxvf jdk 8u152 linux x64.tar.gz 3.解壓後的文件剪切到usr/local目錄下麵 並改名為jdk8 mv j ...
  • 1、電腦的組成及其功能。 電腦系統主要分為硬體系統和軟體系統兩部分。 (1)硬體系統由五部分組成,其中包括: 控制器:調度程式、數據、地址,協調電腦各部分工作及記憶體與外設的訪問; 運算器:對數據進行加工處理; 存儲器:存儲程式、信號、命令,數據等信息,併在需要時提供這些信息,如記憶體和硬碟; 輸 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...