應該向終端列印消息的 Systemd 單元腳本不起作用
我有一個執行 named-chroot 的 CentOS7 伺服器。問題是 named 和 named-chroot 是 CentOS7 中獨立的 systemd 服務,我有一個穩定的系統和一個短的記憶體。在需要 BIND 維護之間幾個月過去了。當我有 BIND 工作要做時,我總是忘記輸入
systemctl restart named-chroot
而是輸入
systemctl restart named
如果我弄錯了,則不會警告我正在啟動不正確的服務。
我想使用 systemd 配置來編輯命名服務,以提醒我犯了一個錯誤。到目前為止,我已經覆蓋了標準命名服務:我使用
systemctl edit named
並輸入以下內容:
[Unit] Description=You want named-chroot Wants= Before= After= [Service] Type=simple EnvironmentFile= Environment= ExecStartPre= ExecStart= ExecStart=/bin/bash -c "/usr/bin/echo 'No, you want named-chroot'" ExecReload= ExecReload=/bin/bash -c "/usr/bin/echo 'No, you want named-chroot'" ExecStop= ExecStop=/bin/bash -c "/usr/bin/echo 'No, you want named-chroot'" StandardOutput=journal+console PrivateTmp=false
這是我得到的。echo 命令的結果將在 journalctl 和 systemctl 狀態中可見。當然,理想的情況是讓它們列印在終端上,但我還沒有想通。這不起作用:
StandardOutput=tty TTYPath=/dev/tty
也不是其變體;我收到錯誤消息,告訴我 /dev/tty 在 bash 中不可用!
另一個問題:即使使用上述文件,像這樣的命令也可能導致 named-chroot 停止而沒有可見的指示符或警告:
systemctl restart named systemctl start named
當我覆蓋了我能找到的每個命名服務選項時,我無法弄清楚為什麼由 named-chroot 啟動的命名守護程序會受到我修改後的命名腳本的影響。
如果您是系統專家,請幫助我完成這項工作。
你為什麼不直接屏蔽服務?這可以防止它以任何方式啟動或使用。
# systemctl mask named Created symlink /etc/systemd/system/named.service → /dev/null. # systemctl start named Failed to start named.service: Unit named.service is masked.
替代建議。刪除該
named
單元並創建一個別名。**通過在其中一個單元搜尋路徑中創建從新名稱到現有名稱的符號連結,可以給單元起別名(具有替代名稱)。**例如,systemd-networkd.service 具有別名 dbus-org.freedesktop.network1.service,在安裝期間創建為符號連結 /usr/lib/systemd/system/dbus-org.freedesktop.network1.service。此外,單元文件可以通過 Alias= 指令指定別名
$$ Install $$部分; 這些別名僅在啟用該單元時有效。啟用該單元時,將為這些名稱創建符號連結,並在禁用該單元時刪除。例如,reboot.target 指定 Alias=ctrl-alt-del.target,因此啟用後,只要按下 CTRL+ALT+DEL 就會呼叫它。別名可用於 enable、disable、start、stop、status 等命令以及單元依賴指令 Wants=、Requires=、Before=、After=、…,但通過 Alias= 指定的別名僅限啟用時有效。別名不能與預設命令一起使用。
https://www.freedesktop.org/software/systemd/man/systemd.unit.html