成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用 systemd 作為問(wèn)題定位工具

運(yùn)維 系統(tǒng)運(yùn)維
沒(méi)有人會(huì)認(rèn)為 systemd 是一個(gè)故障定位工具,但當(dāng)我的 web 服務(wù)器遇到問(wèn)題時(shí),我對(duì) systemd 和它的一些功能的不斷了解幫助我找到并規(guī)避了問(wèn)題。

雖然 systemd 并非真正的故障定位工具,但其輸出中的信息為解決問(wèn)題指明了方向。

沒(méi)有人會(huì)認(rèn)為 systemd 是一個(gè)故障定位工具,但當(dāng)我的 web 服務(wù)器遇到問(wèn)題時(shí),我對(duì) systemd 和它的一些功能的不斷了解幫助我找到并規(guī)避了問(wèn)題。

我遇到的問(wèn)題是這樣,我的服務(wù)器 yorktown 為我的家庭辦公網(wǎng)絡(luò)提供名稱(chēng)服務(wù) 、DHCP、NTP、HTTPD 和 SendMail 郵件服務(wù),它在正常啟動(dòng)時(shí)未能啟動(dòng) Apache HTTPD 守護(hù)程序。在我意識(shí)到它沒(méi)有運(yùn)行之后,我不得不手動(dòng)啟動(dòng)它。這個(gè)問(wèn)題已經(jīng)持續(xù)了一段時(shí)間,我最近才開(kāi)始嘗試去解決它。

你們中的一些人會(huì)說(shuō),systemd 本身就是這個(gè)問(wèn)題的原因,根據(jù)我現(xiàn)在了解的情況,我同意你們的看法。然而,我在使用 SystemV 時(shí)也遇到了類(lèi)似的問(wèn)題。(在本系列文章的 第一篇 中,我探討了圍繞 systemd 作為舊有 SystemV 啟動(dòng)程序和啟動(dòng)腳本的替代品所產(chǎn)生的爭(zhēng)議。如果你有興趣了解更多關(guān)于 systemd 的信息,也可以閱讀 第二篇 和 第三篇 文章。)沒(méi)有完美的軟件,systemd 和 SystemV 也不例外,但 systemd 為解決問(wèn)題提供的信息遠(yuǎn)遠(yuǎn)多于 SystemV。

確定問(wèn)題所在

找到這個(gè)問(wèn)題根源的第一步是確定 httpd 服務(wù)的狀態(tài):

  1. [root@yorktown ~]# systemctl status httpd
  2. httpd.service - The Apache HTTP Server
  3.    Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
  4.    Active: failed (Result: exit-code) since Thu 2020-04-16 11:54:37 EDT; 15min ago
  5.      Docs: man:httpd.service(8)
  6.   Process: 1101 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
  7.  Main PID: 1101 (code=exited, status=1/FAILURE)
  8.    Status: "Reading configuration..."
  9.       CPU: 60ms
  10.  
  11. Apr 16 11:54:35 yorktown.both.org systemd[1]: Starting The Apache HTTP Server...
  12. Apr 16 11:54:37 yorktown.both.org httpd[1101]: (99)Cannot assign requested address: AH00072: make_sock: could not bind to address 192.168.0.52:80
  13. Apr 16 11:54:37 yorktown.both.org httpd[1101]: no listening sockets available, shutting down
  14. Apr 16 11:54:37 yorktown.both.org httpd[1101]: AH00015: Unable to open logs
  15. Apr 16 11:54:37 yorktown.both.org systemd[1]: httpd.service: Main process exited, code=exited, status=1/FAILURE
  16. Apr 16 11:54:37 yorktown.both.org systemd[1]: httpd.service: Failed with result 'exit-code'.
  17. Apr 16 11:54:37 yorktown.both.org systemd[1]: Failed to start The Apache HTTP Server.
  18. [root@yorktown ~]#

這種狀態(tài)信息是 systemd 的功能之一,我覺(jué)得比 SystemV 提供的任何功能都要有用。這里的大量有用信息使我很容易得出邏輯性的結(jié)論,讓我找到正確的方向。我從舊的 chkconfig 命令中得到的是服務(wù)是否在運(yùn)行,以及如果它在運(yùn)行的話(huà),進(jìn)程 ID(PID)是多少。這可沒(méi)多大幫助。

該狀態(tài)報(bào)告中的關(guān)鍵條目顯示,HTTPD 不能與 IP 地址綁定,這意味著它不能接受傳入的請(qǐng)求。這表明網(wǎng)絡(luò)啟動(dòng)速度不夠快,因?yàn)?IP 地址還沒(méi)有設(shè)置好,所以 HTTPD 服務(wù)還沒(méi)有準(zhǔn)備好與 IP 地址綁定。這是不應(yīng)該發(fā)生的,所以我查看了我的網(wǎng)絡(luò)服務(wù)的 systemd 啟動(dòng)配置文件;在正確的 after 和 requires 語(yǔ)句下,所有這些似乎都沒(méi)問(wèn)題。下面是我服務(wù)器上的 /lib/systemd/system/httpd.service 文件:

  1. # Modifying this file in-place is not recommended, because changes
  2. # will be overwritten during package upgrades. To customize the
  3. # behaviour, run "systemctl edit httpd" to create an override unit.
  4.  
  5. # For example, to pass additional options (such as -D definitions) to
  6. # the httpd binary at startup, create an override unit (as is done by
  7. # systemctl edit) and enter the following:
  8.  
  9. # [Service]
  10. # Environment=OPTIONS=-DMY_DEFINE
  11.  
  12. [Unit]
  13. Description=The Apache HTTP Server
  14. Wants=httpd-init.service
  15. After=network.target remote-fs.target nss-lookup.target httpd-init.service
  16. Documentation=man:httpd.service(8)
  17.  
  18. [Service]
  19. Type=notify
  20. Environment=LANG=C
  21.  
  22. ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
  23. ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
  24. # Send SIGWINCH for graceful stop
  25. KillSignal=SIGWINCH
  26. KillMode=mixed
  27. PrivateTmp=true
  28.  
  29. [Install]
  30. WantedBy=multi-user.target

httpd.service 單元文件明確規(guī)定,它應(yīng)該在 network.target 和 httpd-init.service(以及其他)之后加載。我試著用 systemctl list-units 命令找到所有這些服務(wù),并在結(jié)果數(shù)據(jù)流中搜索它們。所有這些服務(wù)都存在,應(yīng)該可以確保在設(shè)置網(wǎng)絡(luò) IP 地址之前,httpd 服務(wù)沒(méi)有加載。

第一個(gè)解決方案

在互聯(lián)網(wǎng)上搜索了一下,證實(shí)其他人在 httpd 和其他服務(wù)也遇到了類(lèi)似的問(wèn)題。這似乎是由于其中一個(gè)所需的服務(wù)向 systemd 表示它已經(jīng)完成了啟動(dòng),但實(shí)際上它卻啟動(dòng)了一個(gè)尚未完成的子進(jìn)程。通過(guò)更多搜索,我想到了一個(gè)規(guī)避方法。

我搞不清楚為什么花了這么久才把 IP 地址分配給網(wǎng)卡。所以我想,如果我可以將 HTTPD 服務(wù)的啟動(dòng)推遲合理的一段時(shí)間,那么 IP 地址就會(huì)在那個(gè)時(shí)候分配。

幸運(yùn)的是,上面的 /lib/systemd/system/httpd.service 文件提供了一些方向。雖然它說(shuō)不要修改它,但是它還是指出了如何操作:使用 systemctl edit httpd 命令,它會(huì)自動(dòng)創(chuàng)建一個(gè)新文件(/etc/systemd/system/httpd.service.d/override.conf)并打開(kāi) GNU Nano 編輯器(如果你對(duì) Nano 不熟悉,一定要看一下 Nano 界面底部的提示)。

在新文件中加入以下代碼并保存:

  1. [root@yorktown ~]# cd /etc/systemd/system/httpd.service.d/
  2. [root@yorktown httpd.service.d]# ll
  3. total 4
  4. -rw-r--r-- 1 root root 243 Apr 16 11:43 override.conf
  5. [root@yorktown httpd.service.d]# cat override.conf
  6. # Trying to delay the startup of httpd so that the network is
  7. # fully up and running so that httpd can bind to the correct
  8. # IP address
  9. #
  10. # By David Both, 2020-04-16
  11.  
  12. [Service]
  13. ExecStartPre=/bin/sleep 30

這個(gè)覆蓋文件的 [Service] 段有一行代碼,將 HTTPD 服務(wù)的啟動(dòng)時(shí)間推遲了 30 秒。下面的狀態(tài)命令顯示了等待時(shí)間里的服務(wù)狀態(tài):

  1. [root@yorktown ~]# systemctl status httpd
  2. httpd.service - The Apache HTTP Server
  3.    Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
  4.   Drop-In: /etc/systemd/system/httpd.service.d
  5.            └─override.conf
  6.            /usr/lib/systemd/system/httpd.service.d
  7.            └─php-fpm.conf
  8.    Active: activating (start-pre) since Thu 2020-04-16 12:14:29 EDT; 28s ago
  9.      Docs: man:httpd.service(8)
  10. Cntrl PID: 1102 (sleep)
  11.     Tasks: 1 (limit: 38363)
  12.    Memory: 260.0K
  13.       CPU: 2ms
  14.    CGroup: /system.slice/httpd.service
  15.            └─1102 /bin/sleep 30
  16.  
  17. Apr 16 12:14:29 yorktown.both.org systemd[1]: Starting The Apache HTTP Server...
  18. Apr 16 12:15:01 yorktown.both.org systemd[1]: Started The Apache HTTP Server.
  19. [root@yorktown ~]#

這個(gè)命令顯示了 30 秒延遲過(guò)后 HTTPD 服務(wù)的狀態(tài)。該服務(wù)已經(jīng)啟動(dòng)并正常運(yùn)行。

  1. [root@yorktown ~]# systemctl status httpd
  2. httpd.service - The Apache HTTP Server
  3.    Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
  4.   Drop-In: /etc/systemd/system/httpd.service.d
  5.            └─override.conf
  6.            /usr/lib/systemd/system/httpd.service.d
  7.            └─php-fpm.conf
  8.    Active: active (running) since Thu 2020-04-16 12:15:01 EDT; 1min 18s ago
  9.      Docs: man:httpd.service(8)
  10.   Process: 1102 ExecStartPre=/bin/sleep 30 (code=exited, status=0/SUCCESS)
  11.  Main PID: 1567 (httpd)
  12.    Status: "Total requests: 0; Idle/Busy workers 100/0;Requests/sec: 0; Bytes served/sec:   0 B/sec"
  13.     Tasks: 213 (limit: 38363)
  14.    Memory: 21.8M
  15.       CPU: 82ms
  16.    CGroup: /system.slice/httpd.service
  17.            ├─1567 /usr/sbin/httpd -DFOREGROUND
  18.            ├─1569 /usr/sbin/httpd -DFOREGROUND
  19.            ├─1570 /usr/sbin/httpd -DFOREGROUND
  20.            ├─1571 /usr/sbin/httpd -DFOREGROUND
  21.            └─1572 /usr/sbin/httpd -DFOREGROUND
  22.  
  23. Apr 16 12:14:29 yorktown.both.org systemd[1]: Starting The Apache HTTP Server...
  24. Apr 16 12:15:01 yorktown.both.org systemd[1]: Started The Apache HTTP Server.

我本來(lái)可以實(shí)驗(yàn)下更短的延遲時(shí)間是否也能奏效,但是我的系統(tǒng)并不用那么嚴(yán)格,所以我覺(jué)得不這樣做。目前系統(tǒng)的工作狀態(tài)很可靠,所以我很高興。

因?yàn)槲沂占怂羞@些信息,我將其作為 Bug1825554 報(bào)告給紅帽 Bugzilla。我相信報(bào)告 Bug 比抱怨 Bug 更有有用。

更好的解決方案

把這個(gè)問(wèn)題作為 bug 上報(bào)幾天后,我收到了回復(fù),表示 systemd 只是一個(gè)管理工具,如果 httpd 需要在滿(mǎn)足某些要求之后被拉起,需要在單元文件中表達(dá)出來(lái)。這個(gè)回復(fù)指引我去查閱 httpd.service 的手冊(cè)頁(yè)。我希望我能早點(diǎn)發(fā)現(xiàn)這個(gè),因?yàn)樗潜任易约合氤龅母鼉?yōu)秀的解決方案。這種方案明確的針對(duì)了前置目標(biāo)單元,而不僅僅是隨機(jī)延遲。

來(lái)自 httpd.service 手冊(cè)頁(yè):

在啟動(dòng)時(shí)開(kāi)啟服務(wù)

httpd.service 和 httpd.socket 單元默認(rèn)是 禁用 的。為了在啟動(dòng)階段開(kāi)啟 httpd 服務(wù),執(zhí)行:systemctl enable httpd.service。在默認(rèn)配置中,httpd 守護(hù)進(jìn)程會(huì)接受任何配置好的 IPv4 或 IPv6 地址的 80 口上的連接(如果安裝了 mod_ssl,就會(huì)接受 443 端口上的 TLS 連接)。

如果 httpd 被配置成依賴(lài)任一特定的 IP 地址(比如使用 Listen 指令),該地址可能只在啟動(dòng)階段可用,又或者 httpd 依賴(lài)其他服務(wù)(比如數(shù)據(jù)庫(kù)守護(hù)進(jìn)程),那么必須配置該服務(wù),以確保正確的啟動(dòng)順序。

例如,為了確保 httpd 在所有配置的網(wǎng)絡(luò)接口配置完成之后再運(yùn)行,可以創(chuàng)建一個(gè)帶有以下代碼段的 drop-in 文件(如上述):

  1. [Unit]
  2. After=network-online.target
  3. Wants=network-online.target

我仍然覺(jué)得這是個(gè) bug,因?yàn)樵?nbsp;httpd.conf 配置文件中使用 Listen 指令是很常見(jiàn)的,至少在我的經(jīng)驗(yàn)中。我一直在使用 Listen 指令,即使在只有一個(gè) IP 地址的主機(jī)上,在多個(gè)網(wǎng)卡和 IP 地址的機(jī)器上這顯然也是有必要的。在 /usr/lib/systemd/system/httpd.service 默認(rèn)配置文件中加入上述幾行,對(duì)不使用 Listen 指令的不會(huì)造成問(wèn)題,對(duì)使用 Listen 指令的則會(huì)規(guī)避這個(gè)問(wèn)題。

同時(shí),我將使用建議的方法。

下一步

本文描述了一個(gè)我在服務(wù)器上啟動(dòng) Apache HTTPD 服務(wù)時(shí)遇到的一個(gè)問(wèn)題。它指引你了解我在解決這個(gè)問(wèn)題上的思路,并說(shuō)明了我是如何使用 systemd 來(lái)協(xié)助解決問(wèn)題。我也介紹了我用 systemd 實(shí)現(xiàn)的規(guī)避方法,以及我按照我的 bug 報(bào)告得到的更好的解決方案。

如我在開(kāi)頭處提到的那樣,這有很大可能是一個(gè) systemd 的問(wèn)題,特別是 httpd 啟動(dòng)的配置問(wèn)題。盡管如此,systemd 還是提供了工具讓我找到了問(wèn)題的可能來(lái)源,并制定和實(shí)現(xiàn)了規(guī)避方案。兩種方案都沒(méi)有真正令我滿(mǎn)意地解決問(wèn)題。目前,這個(gè)問(wèn)題根源依舊存在,必須要解決。如果只是在 /usr/lib/systemd/system/httpd.service 文件中添加推薦的代碼,那對(duì)我來(lái)說(shuō)是可行的。

在這個(gè)過(guò)程中我發(fā)現(xiàn)了一件事,我需要了解更多關(guān)于定義服務(wù)啟動(dòng)順序的知識(shí)。我會(huì)在下一篇文章中探索這個(gè)領(lǐng)域,即本系列的第五篇。

資源

網(wǎng)上有大量的關(guān)于 systemd 的參考資料,但是大部分都有點(diǎn)簡(jiǎn)略、晦澀甚至有誤導(dǎo)性。除了本文中提到的資料,下列的網(wǎng)頁(yè)提供了跟多可靠且詳細(xì)的 systemd 入門(mén)信息。

  • Fedora 項(xiàng)目有一篇切實(shí)好用的 systemd 入門(mén),它囊括了幾乎所有你需要知道的關(guān)于如何使用 systemd 配置、管理和維護(hù) Fedora 計(jì)算機(jī)的信息。
  • Fedora 項(xiàng)目也有一個(gè)不錯(cuò)的 備忘錄,交叉引用了過(guò)去 SystemV 命令和 systemd 命令做對(duì)比。
  • 關(guān)于 systemd 的技術(shù)細(xì)節(jié)和創(chuàng)建這個(gè)項(xiàng)目的原因,請(qǐng)查看 Freedesktop.org 上的 systemd 描述
  • Linux.com 的“更多 systemd 的樂(lè)趣”欄目提供了更多高級(jí)的 systemd 信息和技巧

 

 

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2017-08-08 15:05:55

工具定位數(shù)據(jù)庫(kù)

2021-06-29 10:50:40

Linux.NET命令

2020-02-27 13:01:57

JVM內(nèi)存劃分

2019-05-20 09:54:40

Linuxsystemd自動(dòng)備份

2021-03-17 10:29:35

systemdLinux管理工具

2021-03-04 12:55:01

systemd進(jìn)程管理工具Linux

2021-04-27 15:28:32

程序員技能開(kāi)發(fā)者

2021-12-08 11:25:01

加密貨幣印度支付

2021-05-18 16:25:44

systemd啟動(dòng)項(xiàng)系統(tǒng)運(yùn)維

2018-04-02 11:15:04

Linux終端管理chkservice

2020-10-27 10:58:07

Linux內(nèi)核操作系統(tǒng)

2020-08-13 08:45:09

多線(xiàn)程死鎖

2022-07-20 07:13:45

Linuxsystemd

2021-04-18 12:12:29

systemd定時(shí)器系統(tǒng)運(yùn)維

2022-05-27 10:59:22

LinuxSystemd

2014-07-14 09:24:51

Debiansystemd

2010-08-26 16:48:48

DIV絕對(duì)定位相對(duì)定位

2021-11-15 12:42:25

C# 定位gRPC

2024-01-17 17:36:06

Linuxsystemd

2022-08-02 08:53:03

KubernetesSystemdLinux
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 精品久久久久久久久久久久久久 | 欧美视频二区 | 亚洲高清在线观看 | 精品日韩一区 | 久久精品国产一区 | 亚洲成人观看 | 久久久九九 | 成人h动漫精品一区二区器材 | 黄色成人在线观看 | 亚洲欧美视频一区二区 | 亚洲精品免费在线观看 | 午夜爱爱网 | 91av久久久| 777zyz色资源站在线观看 | 97精品视频在线 | 精品久久影院 | 亚洲a一区| 日韩福利在线 | 欧美1页| 毛片国产 | 久久区二区 | 成人av观看 | 亚洲欧美视频 | 97国产精品 | 激情a| 日韩成人在线观看 | 欧美手机在线 | 91精品一区二区三区久久久久 | 精品国产18久久久久久二百 | 91视频电影 | 玖玖在线精品 | 国产激情一区二区三区 | 瑟瑟视频在线看 | 久久久久久中文字幕 | 精品欧美乱码久久久久久 | 国产精品欧美日韩 | 日本久草| 国产精品欧美一区二区三区不卡 | 激情欧美一区二区三区中文字幕 | 国产91精品久久久久久久网曝门 | 欧美精品一区二区三区在线播放 |