Networking
CentOS 7:NetworkManager 連接重啟
我沒有看到這個問題被問到我看過的其他任何地方。長話短說,由於“連接已移除”,NetworkManager 會在每小時 1 分 1 秒後關閉 eth0。大多數時候,連接會在同一秒內恢復——儘管它顯然會斷開所有連接。在極少數情況下,它不會恢復,儘管設置了靜態 IPv4 地址,但在網路服務重新啟動之前不會恢復。
伺服器是由遠端託管服務提供商在 KVM 中執行的虛擬機,並且在每小時第一分鐘的第一秒內精確執行。這是最近安裝的 CentOS 7 的最小安裝(自 CentOS 4 以來第一次嘗試),只安裝了一個額外的應用程序:Cockpit。
以下是那一秒的日誌:
日誌控制
/var/log/cron
Feb 3 08:01:01 hyaena CROND[1094]: (root) CMD (run-parts /etc/cron.hourly) Feb 3 08:01:01 hyaena run-parts(/etc/cron.hourly)[1094]: starting 0anacron Feb 3 08:01:01 hyaena run-parts(/etc/cron.hourly)[1103]: finished 0anacron Feb 3 08:01:01 hyaena run-parts(/etc/cron.hourly)[1094]: starting docker-cleanup Feb 3 08:01:01 hyaena run-parts(/etc/cron.hourly)[1111]: finished docker-cleanup
/etc/cron.hourly
/0anacron
#!/bin/sh # Check whether 0anacron was run today already if test -r /var/spool/anacron/cron.daily; then day=`cat /var/spool/anacron/cron.daily` fi if [ `date +%Y%m%d` = "$day" ]; then exit 0; fi # Do not run jobs when on battery power if test -x /usr/bin/on_ac_power; then /usr/bin/on_ac_power >/dev/null 2>&1 if test $? -eq 1; then exit 0 fi fi /usr/sbin/anacron -s
/碼頭清理
#!/bin/bash # Do nothing if neither docker nor docker-latest service is running if ! systemctl --quiet is-active docker-latest && ! systemctl --quiet is-active docker; then exit 0 fi # If there are no dead containers, exit. DEAD_CONTAINERS=`docker ps -aq -f status=dead` [ -z "$DEAD_CONTAINERS" ] && exit 0 # Try to cleanup dead containers docker rm $DEAD_CONTAINERS
我清除了 CentOS 安裝介質創建的 ifcfg 文件,並使用 nmcli 從頭開始創建它們。舊的和新的 ifcfg 文件最終幾乎完全相同。不同之處在於內容的順序,自動生成了一個新的 UID,並且我給連接起了一個自定義名稱 ext0 而不是生成的。現在它工作得很好。
所以,到底誰知道呢。翻轉辦公桌表情符號在這裡很有用。
根據我的發現,NetworkManager 完全分離了設備和連接。在我的情況下,由於某種原因,NetworkManager 每小時都會確定 eth0 沒有配置,儘管它是這樣,並且會生成一個臨時的新連接,然後會失敗。因此,完全斷開目前連接,使臨時連接失敗,然後重複。
也許這兩項中的任何一項都是我不知道的其他地方的引用,因此通知 NetworkManager 它確實在使用中並由 NetworkManager 控制(NM_CONTROLLED=yes 什麼也沒做,記錄在案)。
最後,這是我的 ifcfg-ext0:
TYPE=Ethernet BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=yes NAME=ext0 # Arbitrary name given UUID=<UUID generated by NetworkManager> DEVICE=eth0 ONBOOT=yes ZONE=drop DNS1=<IPv4 DNS server> DNS2=<IPv4 DNS server> IPADDR=<static IPv4address> PREFIX=24 GATEWAY=<static IPv4 gateway> DOMAIN=<my domain> DNS3=<IPv6 DNS server> DNS4=<IPv6 DNS server> IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_PRIVACY=no