使 systemd 调试 shell 再次可用

使 systemd 调试 shell 再次可用

指定systemd.debug-shell=1为内核参数是可行的:当 systemd 启动挂起时,我可以通过 Alt+F9 切换到 shell。

但这个外壳是完全不可能的,因为动画

[ ***  ] A start job is running for Create Volatile Files and 
        Directories (4min 23s / no limit)

横幅正在破坏我的提示符和命令行输出。

因此,我的问题是:如何在 shell tty9 中禁用这个阻碍 systemd 的输出?

我同意它显示在 tty1(即主控制台)中 - 但按原样,它会使 systemd 调试 shell 无法使用。

这是 Fedora 29 下的 systemd。

答案1

一种方法是同时设置systemd.show_status作为内核参数。例如,总共:

systemd.debug-shell=1 systemd.show_status=false

这使得 systemd 调试 shell 再次可用。

然而,它会杀死所有 systemd 启动控制台输出,而不仅仅是阻碍动画。也许有更好的方法 - 例如 - 告诉 systemd 以某种方式打印到某个 tty。

挂起的作业可以通过以下方式显示:

# systemctl list-jobs | grep running

答案2

如果添加引导选项console=tty1,它应该将 systemd 输出保留在 tty1 上。

话虽这么说,我认为systemd.show_status = false更接近你的要求。

console=tty1还将在 tty1.[*] 上保留内核消息,因此您可能会错过有用的警告或错误消息。如果内核完全崩溃,它可以将非常有用的信息记录到 tty1,但您将无法切换回来查看它。 (公平地说,一旦使用图形界面,您可能会遇到同样的问题)。


[*]Linux:/dev/console、/dev/tty 和 /dev/tty0 之间的区别

答案3

插入的 返回; 将修复乱码的 F9 控制台系统D

static void manager_print_jobs_in_progress(Manager *m) {
    _cleanup_free_ char *job_of_n = NULL;
    Iterator i;
    Job *j;
    unsigned counter = 0, print_nr;
    char cylon[6 + CYLON_BUFFER_EXTRA + 1];
    unsigned cylon_pos;
    char time[FORMAT_TIMESPAN_MAX], limit[FORMAT_TIMESPAN_MAX] = "no limit";
    uint64_t x;
    return;
    assert(m);

此后,将不再有停止作业通知,但您可以随时查找日记条目。也许人们也可以在某个地方找到等待时间。看可怕的赛昂人被修补了有更多细节。

请随意要求重新打开标题为“修复可怕的“A stop job is running”cylon-animation garbling systemd.debug_shell on Alt-F9”的OP,该OP已从视图中重定向。再次“重复”没有意义。这似乎逐渐行不通。

相关内容