向 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进程(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

有没有人能够像我上面尝试的那样禁用控制台日志记录?如果是这样怎么办?

答案1

如果您将 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.

相关内容