标签: systemd

使 systemd 用户服务依赖于系统目标

我有一个~/.config/systemd/user/example.service像这样的用户服务:

[Unit]
Description=Example service
After=network.target

[Service]
ExecStart=/bin/bash -c 'host google.com > /var/tmp/example'

[Install]
WantedBy=default.target
Run Code Online (Sandbox Code Playgroud)

当然,我试图控制的实际服务确实做了一些有用的事情并访问网络;这只是一个简化的例子。

该服务是通过systemctl --user enable example.service它创建~/.config/systemd/user/default.target.wants/example.service指向的符号链接启用的~/.config/systemd/user/example.service

使用此设置,并systemd按照Arch Wiki 中所述启用用户会话,服务在启动时以我的用户身份启动。但是,实际上并没有在网络建立之后启动;相反,它似乎立即开始,因为/var/tmp/example包含:

;; connection timed out; no servers could be reached
Run Code Online (Sandbox Code Playgroud)

(而且我试图控制的实际服务也无法访问网络,并因类似的名称查找错误而失败)

这意味着该服务实际上并不在network.target. 我如何让它network.target在运行前等待?

linux service arch-linux systemd

9
推荐指数
2
解决办法
4592
查看次数

我可以在启动或停止服务后让 systemd 显示服务状态吗?

我试图让 systemd 做 init.d 脚本会做的事情,在手动给出启动或停止命令后自动显示服务的状态。这有可能吗?

不幸的是,systemd 会立即弹出,因为它在后台运行,然后您必须执行第二个命令来显示状态,启动或停止可能有效,也可能无效,除非您询问并让您幸福地无知,否则 systemd 不会告诉您。

IE。我想得到

service nginx status

在我做完之后自动运行

service nginx start

或者

service nginx restart

(或在大脑受损的 systemd 中, systemctl start nginx.service

init.d systemd

9
推荐指数
1
解决办法
2638
查看次数

使用 fleet/systemd 重置/忽略非零退出代码

我有一个backup.service每小时调用一次backup.timer。不幸的是,在容器内运行的备份脚本可以成功完成,但警告返回非零退出代码。因此,尽管一切可能都有效,但容器会以非零退出代码停止。因此机组进入故障状态。

在这种情况下,计时器似乎不会再次启动该单元,尽管我在 systemd 文档中没有找到任何内容。

明确地说:对我来说,让容器以非零退出代码停止是完全可以的。但是我的计时器不起作用。

我现在可以将该脚本封装到另一个称为 als docker 入口点的脚本中。但我必须确保以某种方式保留输出 auf STDOUT 和 STDERR。

我也可以在单元失败后运行sudo systemctl reset-failed,但这对我来说似乎有点麻烦......(我试过了,在那种情况下计时器再次运行了单元。但它不能作为 ExecStopPost -服务文件中的任务)

有没有更好的方法来确保一个单位

  • 尽管返回非零,但不会进入失败状态,或者
  • 之后重置它的状态,或者
  • 告诉计时器运行该单元,尽管它的状态是失败的

systemd docker coreos

9
推荐指数
1
解决办法
7438
查看次数

更改 systemd 单元标签发送到 journalctl/syslog

是否可以更改 systemd 托管服务用于日志记录的标签?例如,我的自定义服务report-daemon.service定义为

# ...
[Service]
ExecStart=/usr/bin/php # ...
# ...
Run Code Online (Sandbox Code Playgroud)

显示为php而不是report-daemon(似乎从 推断标签ExecStart

$ sudo journalctl --unit report-daemon

# ...
May 30 16:26:11 delta php[994]: Found 0 new revisions for Ctytn4a6zjw
May 30 16:26:12 delta php[994]: Found 0 new revisions for efE8xuvUjAo
# ...
Run Code Online (Sandbox Code Playgroud)

手册页没有列出在单元文件中设置它的任何选项。是否可以在某处更改标签?

logging systemd

9
推荐指数
2
解决办法
7067
查看次数

如何在 systemd 的 journalctl 中显示系统日志优先级

journalctl允许我过滤优先级 ( -p) 并对输出中的优先级进行颜色编码。但是有没有办法让它直接输出优先级,作为文本?

systemd journald journalctl

9
推荐指数
1
解决办法
2155
查看次数

如何使用 systemd 在 Linux 中正确永久启用 ip 转发?

我尝试启用IP转发(间enp0s3tun0接口),并写net.ipv4.ip_forward = 1/etc/sysctl.conf。重启后我有

$ cat /proc/sys/net/ipv4/ip_forward
1
Run Code Online (Sandbox Code Playgroud)

但是转发还是不行。我尝试添加net.ipv4.conf.default.forwarding=1/etc/sysctl.conf。现在重启后我有

$ cat /proc/sys/net/ipv4/ip_forward
1
$ cat /proc/sys/net/ipv4/conf/default/forwarding
1
$ cat /proc/sys/net/ipv4/conf/all/forwarding
1
$ cat /proc/sys/net/ipv4/conf/enp0s3/forwarding
0
$ cat /proc/sys/net/ipv4/conf/tun0/forwarding
0
Run Code Online (Sandbox Code Playgroud)

我无法启用/proc/sys/net/ipv4/conf/enp0s3/forwarding和输入/proc/sys/net/ipv4/conf/tun0/forwardingsysctl.conf因为这些文件在这么早的启动时间不存在:

systemd-sysctl[85]: Couldn't write '1' to 'net/ipv4/conf/enp0s3/forwarding', ignoring: No such file or directory
systemd-sysctl[85]: Couldn't write '1' to 'net/ipv4/conf/tun0/forwarding', ignoring: No such file or directory)
Run Code Online (Sandbox Code Playgroud)

,更多的tun0是动态接口(可以随时添加和删除)。

如果我手动启用转发enp0s3tun0然后转发按预期工作。

那么,如何正确开启接口转发呢? …

linux-networking linux-kernel systemd

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

SaltStack:如果服务文件被更改,则执行`systemctl --system daemon-reload`

我们通过 SaltStack 部署和更改系统服务文件。

例如,如果文件/etc/systemd/system/superfoo.service被更改,则 systemd 会发出以下警告:

Warning: Unit file of superfoo.service changed on disk, 
         'systemctl --system daemon-reload' recommended.
Run Code Online (Sandbox Code Playgroud)

如何使用 salt-stack 自动执行此操作?

systemd saltstack

9
推荐指数
2
解决办法
9262
查看次数

为什么日志日志文件如此庞大?

当我做一个时,journalctl --disk-usage它说日志文件的大小大约为300MB,但是当我查看实际文本时,journalctl | wc -c它大约为28MB。嗯,journald 有压缩,甚至考虑到元数据,如时间戳、uid、消息哈希等,在我看来,这似乎是对磁盘空间的荒谬浪费。

有人能告诉我为什么日志文件与里面的实际文本相比如此之大吗?

logging systemd journald

9
推荐指数
2
解决办法
3173
查看次数

由于“无法获得 D-bus 连接:权限被拒绝”,无法使用 `systemctl --user`

我正在尝试使用类似问题的答案来设置用户级服务。我已经创建了所需的文件并重新启动。

我正在取得进展,因为我现在收到“无法获得 D 总线连接:权限被拒绝”,而“无法获得 D 总线连接:连接被拒绝”,但我很困惑,因为我不知道是什么对象它正在尝试访问(文件?套接字?),因此甚至无法检查当前权限。有任何想法吗?

到目前为止,我已经添加了:

loginctl enable-linger userservice
Run Code Online (Sandbox Code Playgroud)

/usr/lib/systemd/user/dbus.service (-rw-r--r-- root root)

[Unit]
Description=D-Bus User Message Bus
Requires=dbus.socket

[Service]
ExecStart=/usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation
ExecReload=/usr/bin/dbus-send --print-reply --session --type=method_call --dest=org.freedesktop.DBus / org.freedesktop.DBus.ReloadConfig

[Install]
Also=dbus.socket
Run Code Online (Sandbox Code Playgroud)

/usr/lib/systemd/user/dbus.socket (-rw-r--r-- root root)

[Unit]
Description=D-Bus User Message Bus Socket

[Socket]
ListenStream=%t/bus
ExecStartPost=-/bin/systemctl --user set-environment DBUS_SESSION_BUS_ADDRESS=unix:path=%t/bus

[Install]
WantedBy=sockets.target
Also=dbus.service
Run Code Online (Sandbox Code Playgroud)

/home/userservice/.config/systemd/user/userservice.service

[Unit]
Description=Test user-level service

[Service]
Type=dbus
BusName=com.wtf.service
ExecStart=/home/userservice/userservice.py
Restart=on-failure

[Install]
WantedBy=default.target
Run Code Online (Sandbox Code Playgroud)

没有在别处添加任何链接...

让它失败:

systemctl --user status
Run Code Online (Sandbox Code Playgroud)

编辑 2018-10-25:

添加export XDG_RUNTIME_DIR=/run/user/$(id -u) …

dbus systemd systemctl

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

Debian 9 服务器在 auth.log 中没有 sshd

在我的一台服务器 Debian 9 上,没有来自sshdin 的输出/var/log/auth.log。事实上,如果我这样做ag sshd/var/log,它只是不会出现。里面唯一的东西auth.logsystemd-logind. 事实上,几乎所有的日志消息都来自 systemd 是很可疑的。只有零星的少数来自其他事物。

这是我的/etc/rsyslog.conf(减去评论)(它应该是默认值):

module(load="imuxsock") # provides support for local system logging
module(load="imklog")   # provides kernel logging support

$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022

$WorkDirectory /var/spool/rsyslog

$IncludeConfig /etc/rsyslog.d/*.conf

auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
daemon.*                        -/var/log/daemon.log
kern.*                          -/var/log/kern.log
lpr.*                           -/var/log/lpr.log
mail.*                          -/var/log/mail.log
user.*                          -/var/log/user.log

mail.info                       -/var/log/mail.info
mail.warn                       -/var/log/mail.warn
mail.err                        /var/log/mail.err

*.=debug;\
        auth,authpriv.none;\
        news.none;mail.none     -/var/log/debug
*.=info;*.=notice;*.=warn;\
        auth,authpriv.none;\ …
Run Code Online (Sandbox Code Playgroud)

linux debian rsyslog systemd

9
推荐指数
1
解决办法
1018
查看次数