1. 程式人生 > >用systemd管理程序時,修改復位超時等待時間

用systemd管理程序時,修改復位超時等待時間

用systemd管理程序時,系統復位預設等待時間為90s,如果一個程序不能正常結束,則需要倒計時90秒,系統才能復位,立馬感到很煩。

來先看看這個90S是在哪裡定義的吧,不難發現,這個引數是在下面檔案中:

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See systemd-system.conf(5) for details.


[Manager]
#LogLevel=info
#LogTarget=journal-or-kmsg
#LogColor=yes
#LogLocation=no
#DumpCore=yes
#ShowStatus=yes
#CrashChangeVT=no
#CrashShell=no
#CrashReboot=no
#CPUAffinity=1 2
#JoinControllers=cpu,cpuacct net_cls,net_prio
#RuntimeWatchdogSec=0
#ShutdownWatchdogSec=10min
#CapabilityBoundingSet=
#SystemCallArchitectures=
#TimerSlackNSec=
#DefaultTimerAccuracySec=1min
#DefaultStandardOutput=journal
#DefaultStandardError=inherit
#DefaultTimeoutStartSec=90s
#DefaultTimeoutStopSec=90s
#DefaultRestartSec=100ms
#DefaultStartLimitInterval=10s
#DefaultStartLimitBurst=5
#DefaultEnvironment=
#DefaultCPUAccounting=no
#DefaultBlockIOAccounting=no
#DefaultMemoryAccounting=no
#DefaultTasksAccounting=yes
#DefaultTasksMax=512
#DefaultLimitCPU=
#DefaultLimitFSIZE=
#DefaultLimitDATA=
#DefaultLimitSTACK=
#DefaultLimitCORE=
#DefaultLimitRSS=
#DefaultLimitNOFILE=
#DefaultLimitAS=
#DefaultLimitNPROC=
#DefaultLimitMEMLOCK=
#DefaultLimitLOCKS=
#DefaultLimitSIGPENDING=
#DefaultLimitMSGQUEUE=
#DefaultLimitNICE=
#DefaultLimitRTPRIO=

配置檔案中的DefaultTimeoutStopSec=90s決定了這個復位超時等待時間,不過接下來會發現兩個問題:1、手動修改這個檔案後,復位依然需要等待90s,2、編譯時生成的映象目錄中/etc/systemd中並沒有這個檔案。那這兩個問題到底是怎麼回事呢?推薦看看金步國寫的systemd中文手冊:http://blog.csdn.net/huashibuliao/article/details/71566770

裡面的systemd-system.conf寫到:

當作為系統例項執行時, systemd 將會按照 system.conf 配置檔案 以及 system.conf.d 配置目錄中的指令工作; 當作為使用者例項執行時, systemd 將會按照 user.conf 配置檔案 以及 user.conf.d 配置目錄中的指令工作。 這些配置檔案包含了控制 systemd 行為的設定。

預設設定是在編譯期間確定的, 所以僅在確實需要修改預設設定的情況下, 才需要使用配置檔案。位於 /etc/systemd/ 目錄中的初始配置檔案, 僅包含了展示選項預設值的註釋, 目的在於方便系統管理員檢視和直接修改。

如果軟體包想要自定義某些預設設定, 那麼必須將自定義的配置檔案安裝到 /usr/lib/systemd/*.conf.d/ 目錄中。 /etc/ 目錄僅供系統管理員使用。 系統管理員可以利用下面的邏輯來覆蓋預設設定: 主配置檔案最先被讀取, 優先順序也最低。 所有 *.conf.d/ 中的配置檔案 都會覆蓋主配置檔案中的設定。 所有 *.conf.d/ 中的配置檔案(無論位於哪個目錄中), 統一按照檔名的字典順序處理。 如果在多個配置檔案中設定了同一個選項, 那麼僅以檔名最靠後(字典順序)的那一個為準。 為了便於排序, 建議給所有 *.conf.d/ 中的配置檔案 都加上兩位十進位制數字的檔名字首。

如果系統管理員想要遮蔽 /usr/lib/ 目錄中的某個配置檔案, 那麼最佳做法是在 /etc/ 目錄中 建立一個指向 /dev/null 的同名符號連結, 即可徹底遮蔽 /usr/lib/ 目錄中的同名檔案。

看到大神的這段話,你是不是豁然開朗。我也一樣,在大神的指引下,在編譯時,我在原始碼目錄/etc/systemd/目錄增加檔案system.conf,將DefaultTimeoutStopSec這個值改為10s,然後編譯最後將該檔案安裝到/usr/lib/systemd/system.conf.d,最後問題解決。