标签: systemd

如何调试systemd-networkd?

我想用来systemd-networkd在 Ubuntu 上配置我的网络。

我添加了一个/etc/systemd/netwoek/host0.network文件

[Match]
Name=host0

[Network]
Address=10.5.1.1/24
Gateway=10.5.1.254
Run Code Online (Sandbox Code Playgroud)

配置我的host0

# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: host0@if14428: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether d6:fa:2e:69:dd:30 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 169.254.229.86/16 brd 169.254.255.255 scope link host0
       valid_lft …
Run Code Online (Sandbox Code Playgroud)

networking ubuntu systemd

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

如何知道哪个文件或 inode 触发了 systemd.path 单元?

Systemd 提供了通过 inotify 控制特定路径监视的单元文件:systemd.path(5). 如果在监视路径中修改了文件或目录,systemd.service(5)则调用相应的。

根据inotify(7)手册页:

为了确定发生了什么事件,应用程序从 inotify 文件描述符中读取 (2)s。如果到目前为止没有事件发生,那么,假设一个阻塞的文件描述符,read(2) 将阻塞直到至少一个事件发生(除非被信号中断,在这种情况下调用失败并显示错误 EINTR;参见信号(7) ))。

每次成功的 read(2) 都会返回一个包含以下一个或多个结构的缓冲区:

      struct inotify_event {
          int      wd;       /* Watch descriptor */
          uint32_t mask;     /* Mask of events */
          uint32_t cookie;   /* Unique cookie associating related
                                events (for rename(2)) */
          uint32_t len;      /* Size of name field */
          char     name[];   /* Optional null-terminated name */
      };
Run Code Online (Sandbox Code Playgroud)

因此,如果 systemd 看到监视路径发生变化,是否有办法从read(2)命令中获取任何数据?值得注意的是我需要的name[]使用作为参数传递给该命令的ExecStart=systemd.service(5)单元发言。

[Service]
ExecStart=/usr/bin/command --file=$inotifyName
Run Code Online (Sandbox Code Playgroud)

linux inotify systemd

13
推荐指数
1
解决办法
2757
查看次数

为什么 systemd 在重启时挂起?

10 次中有 1 次,systemd 在重启期间挂起。我不明白原因。我应该看什么/在哪里解决问题?我正在使用 systemd v196 并且无法将其升级到版本 >=198,因为后者需要最新的内核(支持 cgroups),无法根据客户要求进行更新。我想知道是否有合理的方法可以发现这种行为的原因并让systemd无条件重启系统。

请注意,此链接没有帮助:http : //freedesktop.org/wiki/Software/systemd/Debugging/#index2h1

正如你可以在那里读到的:

关机永不结束

如果正常重启或关机等待几分钟后仍然无法完成,则上述创建关机日志的方法无济于事,必须使用其他方法获取日志。对调试启动问题有用的两个选项也可用于关闭问题:

use a serial console
use a debug shell - not only is it available from early boot, it also stays active until late shutdown.
Run Code Online (Sandbox Code Playgroud)

我正在使用串行控制台,出于某种原因,我什至可以登录,因为 eth 接口已启动或已启动(在重新启动步骤期间断开连接后)。

我看不出原因。

# cat /etc/systemd/system/
basic.target.wants/                          getty.target.wants/                          multi-user.target.wants/                     sysinit.target.wants/                        
dbus-org.freedesktop.NetworkManager.service  local-fs-pre.target.wants/                   sockets.target.wants/                        syslog.service                               
display-manager.service                      local-fs.target.wants/                       swap.target
Run Code Online (Sandbox Code Playgroud)

注意 swap.target 。它在那里,但我们根本不使用交换分区。我试图屏蔽交换,但挂起问题仍然存在。控制台的最后一行是:

[OK] Stopped target shutdown.
Run Code Online (Sandbox Code Playgroud)

编辑:正如我所说,我可以通过 ssh 通过 eth 重新登录。

现在我将向您展示两个日志。第一个日志发生在重启/shutdwon 挂起时,而第二个日志发生在重启成功时:

挂起案例,输出总是这样(完整日志):

[  OK  ] Stopped Network Time …
Run Code Online (Sandbox Code Playgroud)

linux systemd

13
推荐指数
2
解决办法
4万
查看次数

/var/run/user/$UID 是 PID 文件的新 /var/run 吗?

我有一个应用程序(以 root 身份作为服务运行),它在/var/run. 但我想知道这现在是否不再是最佳实践。

Linux 中 - 2012 年询问的替代 pid 文件而不是 /var/run 的存储位置,提问者询问是否应该将 PID 文件放入/var/run。不过,这很大程度上是在 systemd 出现之前,以及 systemd 操作系统从/var/run到 just 的转变/run(作为 systemd “ API 文件系统”之一并列在systemd 文件层次结构要求中)。

Lennart Poettering(和其他人)的XDG 基本目录规范之类的东西谈到了“特定于用户的非必要运行时文件和其他文件对象(例如套接字、命名管道……)”的其他地方。systemdfile-hierarchy手册页也是如此。

我在别处读到的内容给我的印象/var/run/user/$UID是systemd 操作系统上此类内容的标准位置。

人们可以找到许多其他的例子。

那么我的应用程序应该更改为使用/var/run/user/$UID …

pid file-location systemd

13
推荐指数
1
解决办法
7493
查看次数

无法启动 systemd - 无法获得 D-Bus 连接

我正在尝试systemd在 Debian 上设置守护进程宽度。

systemd已经是发行版的一部分。刚刚在下面添加了一个新的单元文件 my-daemon.service/etc/systemd/system/但在重新启动后,无论我做什么,我都会收到此错误。它在重新启动之前工作

~ # systemctl daemon-reload
Failed to get D-Bus connection: Unknown error -1

~ # systemctl list-units
Failed to get D-Bus connection: Unknown error -1
Run Code Online (Sandbox Code Playgroud)

也尝试删除单元文件 my-daemon.service 并重新启动系统..但仍然出现相同的错误

更新

# dpkg -l | grep -i dbus
ii  at-spi2-core                           2.14.0-1                             amd64        Assistive Technology Service Provider Interface (dbus core)
ii  dbus                                   1.8.22-0+deb8u1                      amd64        simple interprocess messaging system (daemon and utilities)
ii  dbus-x11                               1.8.20-0+deb8u1                      amd64        simple interprocess messaging system (X11 deps)
ii  libdbus-1-3:amd64                      1.8.20-0+deb8u1 …
Run Code Online (Sandbox Code Playgroud)

linux daemon systemd

13
推荐指数
2
解决办法
7万
查看次数

使用 systemd-networkd 向服务器添加多个静态 IP 地址

我们有一个带有多个 IP 地址的服务器。最近我们迁移到 systemd,我们仍然需要该服务器上的多个 IP。使用 systemd-networkd 我们很难找到配置示例。所以我们在启动过程结束时使用 bash 脚本将 ip 添加到接口。

有人可以提供一个 systemd-networkd 配置示例,用于将多个 IP 添加到一个接口。

networking ip ipv4 systemd

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

systemd-timesyncd.service 启动失败

我尝试启动systemd-timesyncd.service服务但失败了:

root@xxxx:~# systemctl start systemd-timesyncd.service
root@xxxx:~# systemctl status systemd-timesyncd.service
? systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/systemd-timesyncd.service.d
           ??disable-with-time-daemon.conf
   Active: inactive (dead)
Condition: start condition failed at pi? 2015-07-10 15:17:56 CEST; 1s ago
           ConditionFileIsExecutable=!/usr/sbin/ntpd was not met
     Docs: man:systemd-timesyncd.service(8)
Run Code Online (Sandbox Code Playgroud)

什么意思:ConditionFileIsExecutable=!/usr/sbin/ntpd was not met
此消息表明缺乏执行权限,但事实并非如此:

root@xxxx:~# ls -l /usr/sbin/ntpd
-rwxr-xr-x 1 root root 549648 kwi 10 21:04 /usr/sbin/ntpd
Run Code Online (Sandbox Code Playgroud)

services system-date ntp systemd

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

CentOS7:用一个命令重启一个服务的多个实例

有没有一种方法可以仅使用一个命令在 systemd 中重新启动服务的所有实例?

假设我们有两个守护进程在运行,分别名为 thingd@01 和 thingd@02。我可以只重启那些而不必为每个实例调用一次 systemctl 吗?

systemd centos-7

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

如何在“systemd”服务文件中获取机器 IP 地址

我需要获取机器的 IP 并在我的服务中使用它:

[Unit]
Description=Redmine server
After=syslog.target
After=network.target

[Service]
Type=simple
User=redmine
Group=redmine
ip="$(/sbin/ip -o -4 addr list eno16777736 | awk '{print $4}' | cut -d/ -f1)"
ExecStart=/usr/bin/ruby /home/redmine/redmine/bin/rails server webrick -e production -b $ip -p 3000

# Give a reasonable amount of time for the server to start up/shut down
TimeoutSec=300

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

如何在systemd服务文件中执行此命令并获取其结果:

ip=$(/sbin/ip -o -4 addr list eno16777736 | awk '{print $4}' | cut -d/ -f1)
Run Code Online (Sandbox Code Playgroud)

为了使用它的结果 infor xxx.xxx.xxx.xxx,像这样:

ExecStart=/usr/bin/ruby /home/redmine/redmine/bin/rails server webrick -e production …
Run Code Online (Sandbox Code Playgroud)

bash systemd centos-7

12
推荐指数
3
解决办法
2万
查看次数

Systemd 错误:可执行路径不是绝对的

我有以下 systemd 代码。

[Unit]
Description=start RCC logger server process
Requires=rcc-drbd.service rcc_check_locked_scr.service s96rcc.service
After=rcc-drbd.service rcc_check_locked_scr.service s96rcc.service

[Service]
ExecStart= exec /var/RCC/RCClogger.sh
Restart=no

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

在我尝试运行它的地方,出现以下错误。

Mar 23 04:45:52 localhost.localdomain systemd[1]: 
[/etc/systemd/system/rcc_logger.service:7] Executable path is not absolute, 
ignoring: exec /v...ogger.sh
Mar 23 04:45:52 localhost.localdomain systemd[1]: rcc_logger.service lacks 
both ExecStart= and ExecStop= setting. Refusing.
Run Code Online (Sandbox Code Playgroud)

我知道这是因为没有 exec 命令的绝对路径,但是由于 exec 作为二进制文件不可用,我不能使用绝对路径。如何让这个 ExecStart 运行?

linux upstart systemd init-script redhat-enterprise-linux

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