Systemd
向 systemd 發送信號以阻止消息出現在控制台上
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
程序(pid722
):# 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
.