Systemd

向 systemd 發送信號以阻止消息出現在控制台上

  • December 30, 2016

systemd 的手冊頁https://www.freedesktop.org/software/systemd/man/systemd.html說可以發送SIGRTMIN+21到 systemd 程序以禁用諸如Started Login service.等狀態消息出現在控制台上。手冊頁中的相關片段如下:

SIGRTMIN+21
Disables display of status messages on the console, as controlled via 
systemd.show_status=0 on the kernel command line.

當我查看程序表時,至少有 4 個不同的程序與 systemd 相關聯。手冊頁中提到了哪些?

~# ps -ef |grep [s]ystemd
root       448     1  0 18:47 ?        00:00:01 /lib/systemd/systemd-journald
root       450     1  0 18:47 ?        00:00:00 /lib/systemd/systemd-udevd
root       722     1  0 18:47 ?        00:00:00 /sbin/cgmanager -m name=systemd
root       723     1  0 18:47 ?        00:00:00 /lib/systemd/systemd-logind
message+   742     1  0 18:47 ?        00:00:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation

我寫了一個簡單的守護程序,除了繼續睡眠 10 秒並確保它在啟動時啟動之外什麼都不做。

我做了一個瘋狂的猜測並將信號發送到cgmanager程序(pid 722):

# kill -SIGRTMIN+21 722

控制台上有幾條關於重新啟動 Cgroup 守護程序的消息,但控制台上繼續出現“Start job ….”消息:

[  OK  ] Stopped Cgroup management daemon.
[  OK  ] Started Cgroup management daemon.

Server lin1 ttyS0

[   ***] A start job is running for Sleep te... initialization (51s / no lim

有沒有人能夠像我上面嘗試的那樣禁用控制台日誌記錄?如果有怎麼辦?

如果您將 systemd 作為您的 init 系統執行,則您需要將這些信號發送到的程序是具有 PID 1 的程序(它可能init在您的系統上被呼叫而不是systemd)。

我認為該程序在收到 SIGRTMIN+21 時不會記錄任何內容,但在收到 SIGUSR1 時會記錄(這會導致 systemd 重新連接到 D-Bus 匯流排):

kill -SIGUSR1 1

journalctl -e然後將顯示:

Dez 30 20:34:25 mineo-foobar systemd[1]: Trying to reconnect to bus...

以上僅表明 PID 1 是發送信號的正確位置,但要停止狀態消息,您仍然必須使用kill -SIGRTMIN+21 1.

引用自:https://unix.stackexchange.com/questions/333865