标签: systemd

Journalctl 仅显示大约过去一小时的日志

我的日志有问题journalctl,它没有显示超过一小时的日志。

第一个日志条目大约是一小时前,而不是要求的 2 天前。

$ date -u
Wed May 13 08:59:21 UTC 2020
$ sudo journalctl --utc --since="2 days ago" -n 1 --no-pager -u datalake-profile-table-error-worker@1.service
-- Logs begin at Tue 2020-03-17 17:30:22 UTC, end at Wed 2020-05-13 09:00:10 UTC. --
May 13 08:11:03 <log content>
Run Code Online (Sandbox Code Playgroud)

服务已于 5 天前开通:

$ sudo systemctl status  datalake-profile-table-error-worker@1.service
...
   Active: active (running) since Thu 2020-05-07 15:45:47 CEST; 5 days ago
...
Run Code Online (Sandbox Code Playgroud)

jorunalctd.conf不过看起来并不可疑:

$ cat /etc/systemd/journald.conf
#  This file is part of systemd. …
Run Code Online (Sandbox Code Playgroud)

linux bash logging systemd

6
推荐指数
1
解决办法
2万
查看次数

systemd 用户实例中的 PATH 环境变量是如何设置的?

使用 Ubuntu 21.04、GNOME 3.38.5 Wayland 和 zsh 作为我的 shell,

$ systemctl --user show-environment

PATH=/home/tony/.cargo/bin:/home/tony/.cargo/bin:/home/tony/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin

我想知道如何~/.cargo/bin重复三遍,但找不到一处设置它的地方。 ~/.pam_environment根本没有提到“PATH”,而且我从来没有运行过 rust 工具链sudo,所以这个变量不太可能在位于/etc.

如何跟踪 PATH 环境变量的设置?

linux path environment-variables systemd

6
推荐指数
1
解决办法
4453
查看次数

在启动时关闭 Debian 笔记本电脑 tty 监视器

我有一台 24/7 开启的笔记本电脑,它运行 debian,没有窗口系统(只有 tty)。我浏览了各种推荐 setterm 或 vbetool 的帖子,并且尝试制作 systemd 启动脚本,但这不起作用。这些方法也不适用于 ssh。

如何在启动时关闭笔记本电脑的屏幕?或者ssh?

(关闭盖子并修改 /etc/systemd/logind.conf 不起作用,因为如果我然后通过 ssh 重新启动它,它不会再次启动,因为 BIOS 会将其置于睡眠模式,我无法更改BIOS 中的此行为)

编辑:如果这是一个关键细节,我很抱歉,但我完全忘记说我已将 nomodeset 添加到/etc/default/grub.

linux laptop debian systemd

6
推荐指数
1
解决办法
1485
查看次数

如何在systemd下调试旧的initd脚本?

我有一个较旧的 initd 脚本来启动我的应用程序。它在旧版本的 SuSE 下运行良好,但在 Open SuSE 12.3 上失败。

奇怪的是

cd /etc/init.d ; ./script start
Run Code Online (Sandbox Code Playgroud)

工作正常。

/etc/init.d/script start
Run Code Online (Sandbox Code Playgroud)

显示重定向到 systemctl,但不启动我的应用程序(也不显示 initd 脚本的任何输出)。

我没有看到任何日志条目显示出了什么问题。我看到的唯一条目是在 /var/log/messages 中,说明应用程序已启动。

我该如何调试?

linux opensuse init systemd systemctl

5
推荐指数
1
解决办法
5678
查看次数

使用 systemd 启动 gpg-agent?

我已经阅读了一些关于 systemd 的内容,但仍然无法弄清楚如何使用它gpg-agent在登录时自动启动。我认为我会使用systemctl --user,但构建 使gpg-agent.service我难倒。欢迎任何和所有指针。

gnupg systemd

5
推荐指数
1
解决办法
3382
查看次数

将 udev 环境变量传递给 systemd 服务执行

我正在迁移绑定到块设备的更改操作并运行给定脚本的现有 udev 规则。

SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/sr0", ACTION=="change", RUN+="/usr/local/bin/script"
Run Code Online (Sandbox Code Playgroud)

在此配置中,udev 传递了与硬件设备相关的环境变量,例如ID_CDROM_MEDIA-0ID_FS_LABEL。我已经更新了 udev 规则以使用 systemd 在硬件更改时启动服务。

SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/sr0", ACTION=="change", TAG+="systemd", ENV{SYSTEMD_WANTS}=="drive-change.service"
Run Code Online (Sandbox Code Playgroud)

systemd 服务文件:

[Unit]
Description=changes to dvd drive

[Service]
Type=oneshot
ExecStart=/usr/local/bin/script

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

此时服务在更改事件上运行,但 udev 中 RUN 命令传递的环境变量不会传递给服务的执行。

是否可以将环境从 udev 传递到 systemd 的执行环境,还是需要显式传递参数?

linux udev systemd

5
推荐指数
1
解决办法
5252
查看次数

使用 systemd 作为守护进程启动 ddclient

我正在尝试在我的 Ubuntu 15.04 中启动 ddclient 作为守护程序,它现在使用systemd,但甚至无法在https://help.ubuntu.com/community/DynamicDNS上关注 Ubuntu wiki 。

我弄完了,

update-rc.d ddclient defaults
Run Code Online (Sandbox Code Playgroud)

然后尝试,

invoke-rc.d ddclient start
Run Code Online (Sandbox Code Playgroud)

进而,

service ddclient start
Run Code Online (Sandbox Code Playgroud)

ps上市仍ddclient遥遥无期。

只有在我做了之后,

/etc/init.d/ddclient restart
Run Code Online (Sandbox Code Playgroud)

我开始看到ddclient出现在ps列表中。

/etc/init.d/ddclient restart应该被弃用吗?我们不应该使用invoke-rc.d ... startservice ... start代替吗?

在 Ubuntu 15.04 systemd 下启动 ddclient 作为守护进程的正确方法是什么?
使它始终在机器启动时启动的正确方法是什么?我想update-rc.d它将不再工作,因为invoke-rc.d,对吧?

谢谢

linux boot daemon ubuntu systemd

5
推荐指数
1
解决办法
8710
查看次数

systemd:在访问时解密 luks 设备

我有一个带有 LUKS 加密分区的外部驱动器。由于该设备是外部 USB 设备,我并不总是需要它,我只想按需解密和自动挂载。我可以轻松地使用x-systemd.automountin将文件系统自动挂载到解密分区上/etc/fstab。但是,我无法按需解密分区。我尝试了两种不同的方法:

  1. 我添加了该行

    mnt-usb-crypt UUID=<UUID> /path/to/keyfile luks
    
    Run Code Online (Sandbox Code Playgroud)

    /etc/crypttab。但是,现在分区总是被解密,即使我没有在/etc/fstab.

  2. 我更改/etc/crypttab并添加了noauto选项:

    mnt-usb-crypt UUID=<UUID> /path/to/keyfile luks,noauto
    
    Run Code Online (Sandbox Code Playgroud)

    现在,根本没有 systemd 设备,预期dev-mapper-mnt-usb.device不存在。

根据 的联机帮助页crypttab,没有像x-systemd.automountcrypt 设备这样的选项。

是否有可能将 systemd 配置为仅在访问设备时对其进行解密?

encryption mount luks systemd

5
推荐指数
1
解决办法
5347
查看次数

为什么 systemd 在会话终止时不尝试停止(某些)进程?

当我尝试关闭logind会话(通过注销)时,某些进程仍在会话下运行,从而阻止其正确终止,从而导致也user@uid.service未终止。我听说后者是一种预期行为(某些单元保持运行是可取的),但我认为让会话运行不是实现这一目标的正确方法。此外,当我手动终止会话时,user@uid.service也终止,所以它似乎像挥之不去的会话用于此目的。

为了说明我在做什么,这是systemd-cgls我正常登录时(即现在)的输出的一部分:

Control group /:
-.slice
??user.slice
  ??user-1000.slice
    ??user@1000.service
    ? ?? //various units listed; removed for brevity
    ??session-c8.scope
      ??4883 login -- sammko     
      ??4905 /usr/bin/gnome-keyring-daemon --daemonize --login
      ?? //various other processes listed; removed for brevity
Run Code Online (Sandbox Code Playgroud)

输出完全符合预期。退出会话后:

Control group /:
-.slice
??user.slice
  ??user-1000.slice
    ??user@1000.service
    ? ?? //various units listed; removed for brevity
    ??session-c8.scope
      ??4905 /usr/bin/gnome-keyring-daemon --daemonize --login
Run Code Online (Sandbox Code Playgroud)

gnome-keyring-daemon以某种方式幸存下来,使会话保持活跃。如果我们现在运行loginctl show-session c8,我们会State=closing在输出中找到。如果我们继续,kill -HUP 4905我们会发现进程和会话终止,并带走了整个进程user-uid.slice。如果我们继续kill …

linux session systemd

5
推荐指数
0
解决办法
1104
查看次数

如何在没有root身份验证的情况下在systemd下运行init.d服务(更新)

我的公司设置了一些它开发的软件,在旧版本的 SLES 上使用 init.d 作为服务运行。我们最近开始在 Amazon 的 EC2 中的 SLES 12 实例上设置新环境,并发现 SLES 12 现在使用 systemd 而不是 init.d。然而,init.d 脚本(即 /etc/init.d 中)中定义的服务似乎仍然可以正常启动,因为 systemd 在后台执行一些魔法来处理预先存在的 init.d 脚本,这很棒。

但是,我们不想以 root 用户身份运行我们的服务——而是创建一个新用户来运行我们的服务。问题是,当我们尝试以非 root 用户身份启动我们的服务时,无论 systemd 为运行旧的 init.d 服务做任何准备,都会请求 root 身份验证,我们认为这不是必要的。在较旧的 SLES 环境中(使用实际的 init.d),我们可以毫无问题地以非 root 用户身份启动服务。据我所知,我们的非 root 用户权限和文件所有权在两种环境中都是相同的。

我认为这是 systemd 对旧的 init.d 内容进行后台处理的原因是启动我们服务的脚本在启动/停止服务的实际命令之前立即回显一行文本,但该行不是't output 即我们被要求在 echo 语句之前进行 root 身份验证。隐藏在 systemd 中的某个包/模块需要身份验证,但我现在不记得它的名字了。

请注意,如果可能,我们希望避免为我们的服务创建特定于服务的 .service 文件 - 我们希望坚持使用我们拥有的 init.d 脚本,并以非 root 用户身份运行它。此外,我们希望在不使用 sudo 的情况下运行该服务(我们在旧环境中不需要 sudo)。

对于这个问题缺乏细节表示歉意 - 一旦我回到办公室并可以获取具体细节等,我会用更具体的细节更新它。但这似乎可能是一个常见问题,所以我希望有人可以对此有所了解。

具体来说:我们希望在 SLES 12 上使用 systemd 以非 root 用户身份运行使用旧 init.d …

suse services init systemd

5
推荐指数
1
解决办法
1万
查看次数