やるきなし

2020/12/07 15:39 / snmpd の起動 option を systemd で変更する

snmpd の default の logging に関する option が -Lsd で,syslog の LOG_DAEMON に送るような設定になっている.これが結構 verbose (LOG_NOTICE が送られる)なので,-LSwd に変更して LOG_WARNING の level に変更したい,という話.

以前は /etc/default/snmpd で設定できていたのだが,/etc/init.d/snmpd/etc/default/snmpd を source しているように見せかけて,実は systemctl が呼び出される仕組みが導入されており,/etc/default/snmpd を変更したところで設定が反映されない./etc/default/snmpd にも以下のようにそんなことが書いてある.

# This file controls the behaviour of /etc/init.d/snmpd
# but not of the corresponding systemd service file.
# If needed, create an override file in
# /etc/systemd/system/snmpd.service.d/local.conf
# see man 5 systemd.unit and man 5 systemd.service

で,/etc/systemd/system/snmpd.service.d/local.conf を作成するというのはいわゆる drop-in ファイルを作るというもので,sudo systemctl edit snmpd.service で作成される /etc/systemd/system/snmpd.service.d/override.conf と同様(local.conf でも問題ない; man systemd.unitlocal.conf で説明されている).

drop-in については man systemd.unit が詳しい.

Note that for drop-in files, if one wants to remove entries from a setting that is parsed as a list (and is not a dependency), such as AssertPathExists= (or e.g. ExecStart= in service units), one needs to first clear the list before re-adding all entries except the one that is to be removed. Dependencies (After=, etc.) cannot be reset to an empty list, so dependencies can only be added in drop-ins. If you want to remove dependencies, you have to override the entire unit.

あと,drop-in ファイルを用意したあとは sudo systemctl daemon-reload が必要(sudo systemctl edit で編集した場合は不要; see man systemctl).