欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Systemd是什么?Systemd Service配置文件詳解

2132110287 ? 來源:萬象奧科 ? 2024-07-22 18:03 ? 次閱讀

1.Systemd簡介

Systemd是什么,以前linux系統(tǒng)啟動init機制,由于init一方面對于進程的管理是串行化的,容易出現(xiàn)阻塞情況,另一方面init也僅僅是執(zhí)行啟動腳本,并不能對服務(wù)本身進行更多的管理。Systemd就是為了解決這些問題而誕生的。它的設(shè)計目標是,為系統(tǒng)的啟動和管理提供一套完整的解決方案,根據(jù)Linux慣例,字母d是守護進程(daemon)的縮寫,Systemd這個名字的含義,就是它要守護整個系統(tǒng)。使用了Systemd,就不需要再用init了。Systemd取代了initd,成為系統(tǒng)的第一個進程(PID 等于 1),其他進程都是它的子進程。

Systemd是目前Linux系統(tǒng)上主要的系統(tǒng)守護進程管理工具,有如下特點:

1.支持并行化任務(wù)

2.同時采用socket式與D-Bus總線式激活服務(wù);

3.按需啟動守護進程(daemon);

4.利用Linux的cgroups監(jiān)視進程;

5.支持快照和系統(tǒng)恢復(fù);

6.維護掛載點和自動掛載點;

7.各服務(wù)間基于依賴關(guān)系進行精密控制。

Systemd可以管理所有系統(tǒng)資源,不同的資源統(tǒng)稱為 Unit(單元),Unit一共分成以下12種。

1.Service:裝守護進程的啟動、停止、重啟和重載操作,是最常見的一種 Unit 文件

2.Target:多個Unit構(gòu)成的一個邏輯組,用于對 Unit 文件進行邏輯分組,引導(dǎo)其它 Unit 的執(zhí)行。它替代了 SysV-init 運行級別的作用,并提供更靈活的基于特定設(shè)備事件的啟動方式

3.Device:硬件設(shè)備,主要用于定義設(shè)備之間的依賴關(guān)系

4.Mount:文件系統(tǒng)的掛載點,可以替代過去的/etc/fstab 配置文件

5.Automount:自動掛載點,相當于 SysV-init 的 autofs 服務(wù)

6.Path:用于監(jiān)控指定文件或路徑的變化,并觸發(fā)其它 Unit 運行

7.Scope:不是用戶創(chuàng)建的,而是 Systemd 運行時產(chǎn)生的,描述一些系統(tǒng)服務(wù)的分組信息

8.Slice:進程組,用于表示一個 CGroup 的樹,通常也不是用戶創(chuàng)建的

9.Snapshot:Systemd快照,可以切回某個快照

10.Socket:監(jiān)控來自于系統(tǒng)或網(wǎng)絡(luò)的數(shù)據(jù)消息,用于實現(xiàn)基于數(shù)據(jù)自動觸發(fā)服務(wù)啟動

11.Swap:虛擬內(nèi)存的交換分區(qū)

12.Timer Unit:定時器,用于配置在特定時間觸發(fā)的任務(wù),替代了 Crontab 的功能

2.SystemdService配置文件

每一個被管理單元(Unit)都需要有一個配置文件用于告知systemd對于該單元(Unit)的管理方式。Systemd默認從目錄/etc/systemd/system/讀取配置文件,但是里面存放的大部分文件都是符號鏈接,指向目錄/lib/systemd/system,配置文件存放于/lib/systemd/system/,開機啟動后會在/etc/systemd/system目錄建立軟鏈接文件,systemctl enable命令用于在/etc/systemd/system/與/lib/systemd/system/兩個目錄之間建立符號鏈接關(guān)系。systemctl disable命令用于在兩個目錄之間撤銷符號鏈接關(guān)系,相當于撤銷開機啟動。配置文件的后綴名,就是該Unit的種類,比如sshd.socket;如果命令行中省略后綴名,Systemd默認后綴名為.service,所以當systemctl enable sshd會被理解成systemctl enable sshd.service。

以sshd.service的配置為例,可用”systemctl cat sshd.service”命令查看sshd服務(wù)的配置文件:

# /lib/systemd/system/ssh.service


[Unit]
Description=OpenBSDSecureShellserver
Documentation=man:sshd(8)man:sshd_config(5)
After=network.targetauditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run




[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=/usr/sbin/sshd-t
ExecStart=/usr/sbin/sshd-D$SSHD_OPTS
ExecReload=/usr/sbin/sshd-t
ExecReload=/bin/kill-HUP$MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify
RuntimeDirectory=sshd
RuntimeDirectoryMode=0755




[Install]
WantedBy=multi-user.target
Alias=sshd.service

通常一個service服務(wù)單元的配置包含3個區(qū)塊:Unit,Service和Install。

2.1Unit區(qū)塊

[Unit]區(qū)塊通常是配置文件的第一個區(qū)塊,用來定義 Unit 的元數(shù)據(jù),以及配置與其他 Unit 的關(guān)系。它的主要字段如下:

Description:簡短描述

Documentation:文檔地址

Requires:當前Unit依賴的其他Unit,如果它們沒有運行,當前Unit會啟動失敗

Wants:與當前Unit配合的其他Unit,如果它們沒有運行,當前Unit不會啟動失敗

BindsTo:與Requires類似,它指定的 Unit 如果退出,會導(dǎo)致當前Unit停止運行

Before:如果該字段指定的Unit也要啟動,那么必須在當前Unit之后啟動

After:如果該字段指定的Unit也要啟動,那么必須在當前Unit之前啟動

Conflicts:這里指定的Unit 不能與當前Unit同時運行

Condition...:當前Unit運行必須滿足的條件,否則不會運行

Assert...:當前Unit運行必須滿足的條件,否則會報啟動失敗

2.2Service區(qū)塊

[Service]區(qū)塊用來Service的配置,只有Service類型的Unit才有這個區(qū)塊。它的主要字段如下:

Type:定義啟動時的進程行為。它有以下幾種值。

Type=simple:默認值,執(zhí)行ExecStart指定的命令,啟動主進程

Type=forking:以fork方式從父進程創(chuàng)建子進程,創(chuàng)建后父進程會立即退出

Type=oneshot:一次性進程,Systemd會等當前服務(wù)退出,再繼續(xù)往下執(zhí)行

Type=dbus:當前服務(wù)通過D-Bus啟動

Type=notify:當前服務(wù)啟動完畢,會通知Systemd,再繼續(xù)往下執(zhí)行

Type=idle:若有其他任務(wù)執(zhí)行完畢,當前服務(wù)才會運行

ExecStart:啟動當前服務(wù)的命令

ExecStartPre:啟動當前服務(wù)之前執(zhí)行的命令

ExecStartPost:啟動當前服務(wù)之后執(zhí)行的命令

ExecReload:重啟當前服務(wù)時執(zhí)行的命令

ExecStop:停止當前服務(wù)時執(zhí)行的命令

ExecStopPost:停止當其服務(wù)之后執(zhí)行的命令

RestartSec:自動重啟當前服務(wù)間隔的秒數(shù)

Restart:定義何種情況Systemd會自動重啟當前服務(wù),可能的值包括always(總是重啟)、on-success、on-failure、on-abnormal、on-abort、on-watchdog

TimeoutSec:定義Systemd停止當前服務(wù)之前等待的秒數(shù)

Environment:指定環(huán)境變量

2.3Install區(qū)塊

[Install]通常是配置文件的最后一個區(qū)塊,用來定義如何啟動,以及是否開機啟動。它的主要字段如下:

WantedBy:它的值是一個或多個Target,當前Unit激活時(enable)符號鏈接會放入/etc/systemd/system目錄下面以Target名+.wants后綴構(gòu)成的子目錄中

RequiredBy:它的值是一個或多個Target,當前Unit激活時,符號鏈接會放入/etc/systemd/system目錄下面以Target 名+ .required后綴構(gòu)成的子目錄中

Alias:當前Unit 可用于啟動的別名

Also:當前Unit激活(enable)時,會被同時激活的其他Unit

3.服務(wù)監(jiān)控啟動

3.1socket觸發(fā)的服務(wù)

涉及網(wǎng)絡(luò)的服務(wù),可以通過 socket 來觸發(fā)啟動。也就是說服務(wù)本身在沒連接業(yè)務(wù)時不用一直空跑著,可以讓systemd 幫忙監(jiān)聽一個 socket ,以減少資源消耗。當真正有業(yè)務(wù)連接進來時,才喚醒目標服務(wù)。要達成這樣的配置,目標服務(wù)程序在實現(xiàn)上也有一定要求。

開發(fā)一個常規(guī)的網(wǎng)絡(luò)服務(wù),一般有以下幾個關(guān)鍵步驟:

1.創(chuàng)建一個socket

2.調(diào)用bind將該socket綁定一個端口

3.調(diào)用listen監(jiān)聽端口,將該socket變成監(jiān)聽文件描敘符fd

4.調(diào)用accept接收一個客戶端連接,得到一個新的連接文件描敘符fd

5.讀寫連接socket的fd,完成業(yè)務(wù)邏輯

借助 systemd 強大且通用的服務(wù)功能,它可以幫忙完成前兩步,并且將 socket 的 fd 傳給被激活的程序,后者就只要從第3步開始實現(xiàn)工作。

由socker觸發(fā)的服務(wù)對應(yīng)于 systemd 的配置文件要有兩個,后綴分別是.socket與.service ,除后綴外的文件名要相同,這樣就能自動關(guān)聯(lián),例如名為hello-world-socket的服務(wù):

hello-world-socket.socket

[Unit]
Description=Hello World Socket




[Socket]
ListenStream=0.0.0.0:1234

hello-world-socket.service

[Unit]
Description=Hello World Socket Service




[Service]
ExecStart=/absolute/path/to/hello-world-socket.exe

如上,.socket的配置,需要有[Socket]段,ListenStream字段表示了要監(jiān)聽的地址與端口。相應(yīng)的 .service 配置,與之前例子一樣,描敘了如何啟動服務(wù)。因為這是想由 socket 激活的 service ,故沒有配置重啟字段。

在systemctl的大多數(shù)子命令中,如start,其參數(shù)默認是假定.service單元配置的。例如systemctl start hello-world-socket 等效于 systemctl start hello-world-socket.service 。但在這個例子中,有兩種同名單元配置,且按要求先只啟動 hello-world-socket.socket ,所以要寫完整的單元名:

systemctl start hello-world-socket.socket

3.2定時器觸發(fā)的服務(wù)

對于定時器觸發(fā)的服務(wù)首先要配置一個 .timer 單元文件,例如:

hello-world.timer

[Unit]
Description=The Hello-World Timer


[Timer]
OnCalendar=*-*-* *00

其中,OnCalendar 的配置格式同 crontab ,上例表示每分鐘觸發(fā)。

然后需要一個同名的 .service 單元文件。本文開頭編譯的 hello-world.exe 正好可作為該定時器啟動的程序,例如:

hello-world.service

[Unit]
Description=The Hello-World Timer




[Service]
Type=oneshot
ExecStart=/absolute/path/to/hello-world.exe
StandardOutput=file:/absolute/path/to/stdout-file

然后啟動定時器,并查看狀態(tài):

systemctlstarthello-world.timer
systemctl status hello-world.timer

4.服務(wù)異常重運行

為了確保服務(wù)在遭遇故障時能夠自動重啟。在Systemd的服務(wù)單元文件中,Restart指令是控制服務(wù)重啟行為的核心設(shè)置。本文章將探討Restart=on-failure與Restart=always這兩個選項的區(qū)別,幫助開發(fā)人員對系統(tǒng)服務(wù)做出更適合的選擇。Restart指令定義了當服務(wù)停止時Systemd的行為。它可以精細控制服務(wù)在遇到不同退出情況時是否應(yīng)該重啟。這是確保關(guān)鍵服務(wù)可靠性的重要機制,尤其是在生產(chǎn)環(huán)境中,服務(wù)的持續(xù)運行對業(yè)務(wù)至關(guān)重要

4.1Restart=on-failure智能重啟

當服務(wù)單元文件中設(shè)置了Restart=on-failure時,Systemd會在服務(wù)因錯誤退出時嘗試重啟服務(wù)。"錯誤退出"通常是指服務(wù)以非零狀態(tài)碼結(jié)束運行,這可能是由于程序崩潰、遇到未處理的異常或其他非正常情況導(dǎo)致的。例如,如果你的服務(wù)由于內(nèi)存不足而崩潰,on-failure將確保服務(wù)嘗試重新啟動。但如果服務(wù)是由于正常的系統(tǒng)維護任務(wù)而被停止,或者開發(fā)人員故意停止服務(wù)進行調(diào)試,那么它將不會被重啟。

其應(yīng)用場景如下:

生產(chǎn)環(huán)境:在不希望因為維護或更新操作而自動重啟服務(wù)的生產(chǎn)環(huán)境中使用。

故障排除:當服務(wù)可能需要在出現(xiàn)問題時停止,以便進行故障排除時。

有條件的重啟:當你只想在服務(wù)因特定問題而停止時重啟。

4.2Restart=always:無條件重啟

與on-failure相對的是Restart=always選項。不管服務(wù)是如何終止的,系統(tǒng)都會嘗試將其重啟。這意味著即使服務(wù)被管理員有意關(guān)閉,或者服務(wù)正常結(jié)束,Systemd也會立即嘗試將其重啟。

這種策略適用于那些必須始終運行的服務(wù),無論它們是因為何種原因停止的。這確保了即使在進行系統(tǒng)更新或維護時,服務(wù)也能盡可能快地恢復(fù)運行。

其應(yīng)用場景如下:

關(guān)鍵服務(wù):對于那些系統(tǒng)的核心功能,如數(shù)據(jù)庫服務(wù)或Web服務(wù)器,這些服務(wù)的任何停機時間都是不可接受的。

高可用性要求:在需要最大程度減少服務(wù)停機時間的環(huán)境中。

簡化管理:在希望無論服務(wù)如何停止都能立即重啟的情況下。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11352

    瀏覽量

    210548
  • Linux系統(tǒng)
    +關(guān)注

    關(guān)注

    4

    文章

    596

    瀏覽量

    27526
  • 進程
    +關(guān)注

    關(guān)注

    0

    文章

    204

    瀏覽量

    14004

原文標題:Linux項目開發(fā),你必須了解Systemd服務(wù)!

文章出處:【微信號:萬象奧科,微信公眾號:萬象奧科】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Linux使用Systemd管理進程服務(wù)

    systemd是目前Linux系統(tǒng)上主要的系統(tǒng)守護進程管理工具,由于init一方面對于進程的管理是串行化的,容易出現(xiàn)阻塞情況,另一方面init也僅僅是執(zhí)行啟動腳本,并不能對服務(wù)本身進行更多的管理
    發(fā)表于 11-28 09:07 ?581次閱讀

    Linux使用Systemd管理進程服務(wù)

    今天浩道跟大家分享linux運維中大家很少用到的一個硬核干貨,使用 Systemd 管理進程服務(wù)。讓你體驗一下該技巧帶來的便捷性!
    發(fā)表于 12-12 09:02 ?514次閱讀

    如何在 Linux 上從 NetworkManager 切換為 systemd

    帶.network 擴展名的配置信息文本文件。這些網(wǎng)絡(luò)配置文件保存到 /etc/systemd/network 并從這里加載。當有多個文件
    發(fā)表于 11-25 10:08

    【Intel Edison試用體驗】嚴肅臉試用5——從SSH無法連接到systemd

    作為其他配置文件的依賴我們查看一下[email protected]:22-192.168.1.108:52281.service 里面寫的什么: systemctl cat
    發(fā)表于 08-10 23:04

    systemd定時器的基本操作方法

    定時器任務(wù)作為嵌入式系統(tǒng)中常見的應(yīng)用,systemd 定時器為用戶提供更多的可配置功能以及優(yōu)化選項。本文列舉了 systemd 定時器基本操作方法,以及和cron 對比,幫助用戶更快得使用。更多的技術(shù)細節(jié)和功能請參考下面的鏈接內(nèi)
    發(fā)表于 01-01 07:37

    RK3399開發(fā)板Desktop版本如何設(shè)置開機自啟服務(wù)

    飛凌RK3399開發(fā)板Desktop版本如何設(shè)置開機自啟服務(wù)。systemd 默認讀取 /etc/systemd/system 下的配置文件,該目錄下的文件會鏈接/lib/
    發(fā)表于 03-02 15:29

    i.M8XMQ開發(fā)板如何通過Systemd服務(wù)實現(xiàn)應(yīng)用自啟

    會去三個目錄下找相應(yīng)的配置文件,按優(yōu)先級從高到底分別為/etc/systemd/ /usr/lib/systemd/ /lib/systemd/優(yōu)先級高的
    發(fā)表于 04-25 15:22

    如何將imx8mpevk板的默認Systemd - Init Manager更改為Sysvinit?

    如何將 imx8mpevk 板的默認 Systemd - Init Manager 更改為 Sysvinit。是否更改了 build/conf/local.conf 文件 INIT_MANAGER
    發(fā)表于 03-15 06:42

    systemd以非root用戶身份運行Weston報錯是怎么回事?

    ]: [14:12:41.393] 飛行記錄器:啟用weston[623]: [14:12:41.393] 使用配置文件 \'/etc/xdg/weston/weston.初始值weston[623
    發(fā)表于 04-19 10:24

    技術(shù)分享 | Linux系統(tǒng)下systemctl常用命令以及service文件配置

    linux服務(wù)管理的兩種方式為service和systemctl。systemd是Linux系統(tǒng)最新的初始化系統(tǒng)(init),作用是提高系統(tǒng)的啟動速度,盡可能啟動較少的進程,盡可能并發(fā)啟動更多
    的頭像 發(fā)表于 09-22 09:37 ?2475次閱讀
    技術(shù)分享 | Linux系統(tǒng)下systemctl常用命令以及<b class='flag-5'>service</b><b class='flag-5'>文件</b><b class='flag-5'>配置</b>

    KT142C語音芯片配置文件總是不起作用?配置文件的問題集中歸納

    KT142C語音芯片配置文件總是不起作用?配置文件的問題集中歸納
    的頭像 發(fā)表于 10-20 15:04 ?639次閱讀
    KT142C語音芯片<b class='flag-5'>配置文件</b>總是不起作用?<b class='flag-5'>配置文件</b>的問題集中歸納

    springboot的全局配置文件有幾種

    Spring Boot是一種快速開發(fā)框架,其通過提供配置文件來實現(xiàn)對應(yīng)用程序的配置。全局配置文件在Spring Boot中起著非常重要的作用,可以用于配置各種不同的屬性,包括數(shù)據(jù)庫連接
    的頭像 發(fā)表于 12-03 15:28 ?1662次閱讀

    php的配置文件是什么

    PHP的配置文件是一種用于配置PHP解釋器的文本文件。它包含了一系列的指令和選項,用于影響PHP的行為和性能。通過修改配置文件,可以改變PHP解釋器的默認行為,從而滿足不同的需求。 在
    的頭像 發(fā)表于 12-04 15:55 ?1623次閱讀

    Linux項目開發(fā),你必須了解Systemd服務(wù)!

    1.Systemd簡介Systemd是什么,以前l(fā)inux系統(tǒng)啟動init機制,由于init一方面對于進程的管理是串行化的,容易出現(xiàn)阻塞情況,另一方面init也僅僅是執(zhí)行啟動腳本,并不能對服務(wù)
    的頭像 發(fā)表于 06-18 17:59 ?919次閱讀
    Linux項目開發(fā),你必須了解<b class='flag-5'>Systemd</b>服務(wù)!

    systemd journal收集日志的三種方式

    隨著 systemd 成了主流的 init 系統(tǒng),systemd 的功能也在不斷的增加,比如對系統(tǒng)日志的管理。Systemd 設(shè)計的日志系統(tǒng)好處多多,這里筆者就不再贅述了,本文筆者主要介紹 s
    的頭像 發(fā)表于 10-23 11:50 ?370次閱讀
    <b class='flag-5'>systemd</b> journal收集日志的三種方式