在進行centos上開發時,將一些軟件設置為開機啟動,又或者是能夠使用systemctl命令進行啟動會增加便利性,這里介紹centos上自定義開機啟動的方法。 systemctl 用于系統服務的配置,部署,redhat系已經將systemd作為了其默認的系統服務管理工具。其他實現方法也有service命令,或者直接修改/etc/init.d文件,再或者使用chkconfig這樣的工具。
開機啟動配置文件在/lib/systemd/system目錄中,服務以.service結尾,這里以docker倉庫項目registry為例進行說明。registry啟動需要加配置文件,配置文件為config-example.yml,我將之放到了/home/neo/docker-registry目錄中,將registry移動到了/usr/bin目錄下,那么啟動registry鏡像倉庫的命名為registry /home/neo/docker-registry/config-example.yml。每次都這么啟動太過麻煩,這里介紹開機自啟動方式,首先建立服務文件/lib/systemd/system/registry.service
。文件的具體內容為:
注意:[Service]中需要加上Execstop=/bin/kill /usr/bin/registry
,不然當執行systemctl start registry
命令時不會退出到后臺
以644的權限保存文件
改變service文件時需要執行systemctl daemon-reload
來使改變生效 啟動registry服務命令: systemctl start registry 開啟啟動registry命令: systemctl enable registry
梁明遠,國防科大并行與分布式計算國家重點實驗室(PDL)應屆研究生,14年入學伊始便開始接觸docker,準備在余下的讀研時間在docker相關開源社區貢獻自己的代碼,畢業后準備繼續從事該方面研究。郵箱:[email protected]
http://www.centoscn.com/CentOS/config/2015/0507/5374.html https://www.zybuluo.com/wtf0215/note/305668
[Unit]
包含不依賴單元類型的一般選項,這些選項提供單元描述,知道單元行為,配置單元和其他單元的依賴性
Description : 單元描述信息,(systemctl status)命令時輸出這些文字信息。一段描述這個 Unit 文件的文字,通常只是簡短的一句話 Documentation : 單元文檔信息的URLs。指定服務的文檔,可以是一個或多個文檔的URL路徑 After : 定義 在哪些單元之后啟動本單元,本單元只在指定的單元啟動之后啟動,會在后面列出的所有模塊全部啟動完成以后,才會啟動當前的服務 Before : 定義 在哪些單元之前啟動本單元,在啟動指定的任一個模塊之前,都會首先確保當前服務已經運行 Requires : 配置單元的依賴性,在Requires選項中的單元需要一起被激活,如果有一個單元啟動失敗,其他單元都不會被啟動。 Wants : 比Requires選項依賴性要弱很多,觸發啟動列出的每個 Unit 模塊,而不去考慮這些模塊啟動是否成功.如果列表之中的的單元啟動失敗,不會對其他單元造成影響 BindsTo : 更強的關聯。啟動這個服務時會同時啟動列出的所有模塊,當有模塊啟動失敗時終止當前服務。反之,只要列出的模塊全部啟動以后,也會自動啟動當前服務。并且這些模塊中有任意一個出現意外結束或重啟,這個服務會跟著終止或重啟。 PartOf : 這是一個 BindTo 作用的子集,僅在列出的任何模塊失敗或重啟時,終止或重啟當前服務,而不會隨列出模塊的啟動而啟動 OnFailure : 當這個模塊啟動失敗時,就自動啟動列出的每個模塊 Conflicts : 定義單元沖突關系,和Requires相反,與這個模塊有沖突的模塊,如果列出模塊中有已經在運行的,這個服務就不能啟動,反之亦然
[Service]
單元特定的類型指令,在此節組織,這個段是 .service 文件獨有的,也是對于服務配置最重要的部分。
Type : 配置單元進程在啟動時候的類型,影響執行和關聯選項的功能,可選的關鍵字是: simple : 默認值,進程和服務的主進程一起啟動;(這個可以在執行完命令后回到命令行形式即后臺) forking : 進程作為服務主進程的一個子進程啟動,父進程在完全啟動之后退出。 oneshot : 同simple相似,但是進程在啟動單元之后隨之退出。 dbus : 同simple相似,但是隨著單元啟動后只有主進程得到D-BUS名字。 notify : 同simple相似,但是隨著單元啟動之后,一個主要信息被sd_notify()函數送出。 idle : 同simple相似,實際執行進程的二進制程序會被延緩直到所有的單元的任務完成,主要是避免服務狀態和shell混合輸出。 ExecStart : 指定啟動單元的命令或者腳本,這個參數是幾乎每個 .service 文件都會有的,指定服務啟動的主要命令,在每個配置文件中只能使用一次。 ExecStartPRe : 指定在ExecStart之前用戶自定義執行的腳本。Type=oneshot允許指定多個希望順序執行的用戶自定義命令。 指定在啟動執行 ExecStart 的命令前的準備工作,可以有多個,所有命令會按照文件中書寫的順序依次被執行。 ExecStartPost : 指定在ExecStart之后用戶自定義執行的腳本 指定在啟動執行 ExecStart 的命令后的收尾工作,也可以有多個 ExecStop : 指定單元停止時執行的命令或者腳本。 停止服務所需要執行的主要命令 ExecStopPost : 指定在 ExecStop 命令執行后的收尾工作,也可以有多個 TimeoutStopSec : 停止服務時的等待的秒數,如果超過這個時間服務仍然沒有停止,systemd 會使用 SIGKILL 信號強行殺死服務的進程。 ExecReload : 指定單元重新加載時執行的命令或者腳本。 Restart : 這個選項如果被允許,服務重啟的時候進程會退出,會通過systemctl命令執行清除并重啟的操作。 這個值用于指定在什么情況下需要重啟服務進程。常用的值有 no,on-success,on-failure,on-abnormal,on-abort 和 always。默認值為 no,即不會自動重啟服務 RestartSec : 如果服務需要被重啟,這個參數的值為服務被重啟前的等待秒數 RemainAfterExit : 如果設置這個選擇為真,服務會被認為是在激活狀態,即使所以的進程已經退出,默認的值為假, 這個選項只有在Type=oneshot時需要被配置 值為 true 或 false(也可以寫 yes 或 no),默認為 false。 當配置值為 true 時,systemd 只會負責啟動服務進程,之后即便服務進程退出了,systemd 仍然會認為這個服務是在運行中的。 這個配置主要是提供給一些并非常駐內存,而是啟動注冊后立即退出然后等待消息按需啟動的特殊類型服務使用 TimeoutStartSec : 啟動服務時的等待的秒數,如果超過這個時間服務任然沒有執行完所有的啟動命令,則 systemd 會認為服務自動失敗。 通常對于這種服務,需要將 TimeoutStartSec 的值指定為 0,從而關閉超時檢測 Environment : 為服務添加環境變量 EnvironmentFile : 指定加載一個包含服務所需的環境變量列表的文件,文件中的每一行都是一個環境變量的定義 Nice : 服務的進程優先級,值越小優先級越高,默認為0。-20為最高優先級,19為最低優先級 WorkingDirectory: 指定服務的工作目錄 RootDirectory : 指定服務進程的根目錄( / 目錄),如果配置了這個參數后,服務將無法訪問指定目錄以外的任何文件。 User : 指定運行服務的用戶,會影響服務對本地文件系統的訪問權限 Group : 指定運行服務的用戶組,會影響服務對本地文件系統的訪問權限
[Install]
包含systemctl enable或者disable的命令安裝信息
Alias : 為單元提供一個空間分離的附加名字。 RequiredBy : 和前面的 Requires 作用相似,同樣后面列出的不是服務所依賴的模塊,而是依賴當前服務的模塊。 WantedBy : 和前面的 Wants 作用相似,只是后面列出的不是服務所依賴的模塊,而是依賴當前服務的模塊 Also : 指出和單元一起安裝或者被協助的單元。 DefaultInstance : 實例單元的限制,這個選項指定如果單元被允許運行默認的實例
新聞熱點
疑難解答