标签: systemd

如何从systemctl状态服务查看完整日志?

我用 来检查服务状态systemctl status service-name

默认情况下,我只看到几行,所以我添加-n50以查看更多。

有时,我想从头开始查看完整日志。它可能有 1000 行。
现在,我检查它,-n10000但这看起来不是很好的解决方案。

是否有类似于less命令的选项来检查完整的 systemd 服务日志?

logs systemd

683
推荐指数
6
解决办法
96万
查看次数

如何清除journalctl

我在谷歌找不到任何安全的方法来清除 systemd 日志。有谁知道这样做的任何安全可靠的方法?

假设我正在尝试一些东西,我的日志被各种错误消息弄得乱七八糟。此外,我正在使用 Conky 在桌面上显示我的日记。我真的不想看到那些错误,因为它们让我想起我正在修复这些东西的糟糕日子,我想在经历了这次恐怖之后感觉自己像个新手。我想每个人都会同意这是清除日志的正当理由:P。

systemd systemd-journald

395
推荐指数
8
解决办法
44万
查看次数

查看 systemd 服务的 stdout/stderr

我为自定义应用程序创建了一个简单的 systemd 服务文件。当我手动运行该应用程序时,它运行良好,但是当我使用 systemd 运行它时,我的 CPU 会达到极限。

我正在尝试追踪我的问题出在哪里,但我不知道在哪里可以找到输出(或如何配置 systemd 以将输出放在某处)。

这是我的服务文件:

[Unit]
Description=Syncs files with a server when they change
Wants=network.target
After=network.target

[Service]
ExecStart=/usr/local/bin/filesync-client --port 2500
WorkingDirectory=/usr/local/lib/node_modules/filesync-client
Restart=always

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

在整个应用程序中,我输出到 stdout 和 stderr。

如何读取守护进程的输出?

编辑:

我发现man systemd.exec,其中提到了该StandardOutput=选项,但我不确定如何使用它。从手册页

StandardOutput=

控制已执行进程的文件描述符 1 (STDOUT) 连接到的位置。采用inheritnullttysyslogkmsgkmsg+consolesyslog+consolesocket 之一

如果设置为继承标准输入的文件描述符,则为标准输出复制。如果设置为null标准输出将连接到/dev/null,即写入的所有内容都将丢失。如果设置为tty标准输出将连接到 tty(通过 配置TTYPath=,见下文)。如果仅使用TTY 输出,则执行的进程不会成为终端的控制进程,也不会失败或等待其他进程释放终端。 …

logs io-redirection systemd

257
推荐指数
2
解决办法
36万
查看次数

如何为 Systemd 编写启动脚本?

我的笔记本电脑上有 2 个显卡。一个是IGP,另一个是离散的。

我写了一个shell脚本来关闭独立显卡。

如何将其转换为 systemd 脚本以在启动时运行它?

init-script shell-script systemd

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

测试服务是否在脚本中运行的“正确”方法

我的问题:

我正在编写一个 bash 脚本,我想在其中检查给定的服务是否正在运行。

我知道如何手动执行此操作,使用$ service [service_name] status.

但是(尤其是在转向 systemd 之后)会打印一大堆文本,解析起来有点麻烦。我假设有一个为脚本制作的命令,带有简单的输出或我可以检查的返回值。

但是谷歌搜索只会产生大量“哦,只是ps aux | grep -v grep | grep [service_name]”的结果。这不可能是最佳做法,是吗?如果该命令的另一个实例正在运行,但不是由 SysV init 脚本启动的呢?

还是我应该闭嘴,用一点 pgrep 弄脏我的手?

shell-script systemd

195
推荐指数
6
解决办法
20万
查看次数

Upstart 和 systemd 的优缺点是什么?

看起来systemd是该块上最热门的新init系统,就像几年前的Upstart一样。每个的优点/缺点是什么?另外,每个与其他初始化系统相比如何?

systemd init upstart

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

在启动 systemd 服务之前执行 chdir

问题:我可以使用 systemd 启动一个进程并为该进程指定一个我选择的工作目录吗?

我有一项我想开始的服务systemd。当该服务启动时,我希望能够为其分配一个当前工作目录。如果我正在使用init,我知道该怎么做,但是我在使用systemd.

这就是我一直在努力工作的内容。

我的服务

我创建了一个简单的实用程序(“listdir”),用 Python 编写,并放置在/opt/bin/listdir

#! /usr/bin/python

import os

print 'Current working directory: %s' % (os.getcwd())
Run Code Online (Sandbox Code Playgroud)

我的配置文件

然后我创建了一个listdir.service文件systemd并将它放在这里/lib/systemd/system/listdir.service

[Unit]
Description=Test of listing CWD.

[Service]
ExecStartPre=chdir /usr/local
ExecStart=/opt/bin/listdir
StandardOutput=syslog
StandardError=syslog

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

问题

当我运行systemctl start listdir我的系统日志时,将根目录(“/”)记录为当前工作目录。当然,我期望/usr/local作为当前目录,因为我认为ExecStartPre在开始该过程之前会更改目录。

显然,我想象它systemd会像 shell 脚本一样工作(即使我知道它不是 shell 脚本)。有人可以让我知道我应该做什么吗?甚至可以使用systemd? 谢谢!


编辑:我的系统日志报告错误。(我刚注意到。)

Executable path is not absolute, ignoring: chdir /usr/local 
Run Code Online (Sandbox Code Playgroud)

所以, …

systemd

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

systemd 如何使用 /etc/init.d 脚本?

我刚切换到 debian jessie,大多数东西都运行正常,包括我的图形显示管理器wdm

问题是,我只是不明白这是如何工作的。显然我的/etc/init.d/wdm脚本被调用了,因为当我exit在那里提前放置时,wdm 没有启动。但是当我或者重命名 /etc/rc3.d目录时(我的默认运行级别曾经是 3),然后 wdm 仍然启动。

我不知道 systemd 如何找到这个脚本,我不明白它对所有其他 init.d 脚本做了什么。

  • systemd 何时以及如何运行 init.d 脚本?
  • 从长远来看,我应该摆脱所有 init.d 脚本吗?

init-script systemd init sysvinit

153
推荐指数
2
解决办法
19万
查看次数

我在哪里放置我的 systemd 单元文件?

读到单元文件有两个文件夹(不在用户模式下)。

/usr/lib/systemd/system/: units provided by installed packages
/etc/systemd/system/: units installed by the system administrator
Run Code Online (Sandbox Code Playgroud)

与这种理解相冲突的是这个问题的答案:如何为 Systemd 编写启动脚本。有人可以填写缺失的信息以便我了解发生了什么吗?(更新:答案已更新,我的理解不再与之冲突。

此外,脚本似乎组织在文件夹内的子/etc/systemd/system/文件夹中:

getty.target.wants
multi-user.target.wants
Run Code Online (Sandbox Code Playgroud)

在另一个位置,我读到还有其他位置。这些似乎是针对用户特定的服务。

/usr/lib/systemd/user/ where services provided by installed packages go.
/etc/systemd/user/ where system-wide user services are placed by the system administrator.
~/.config/systemd/user/ where the user puts its own services.
Run Code Online (Sandbox Code Playgroud)

2015-08-31 更新:

为了其他人,这里是我最近问的一个相关问题的链接:我在哪里放置由 systemd 单元执行的脚本?

directory-structure systemd

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

导致在网络启动后执行脚本?

我对 systemd 比较陌生,正在学习它的架构。

现在,我正试图弄清楚如何使自定义 shell 脚本运行。该脚本需要运行后,网络层已启动。

我正在运行 Arch,使用 systemd 和 netctl。

为了测试,我编写了一个简单的脚本,它只执行ip addr list > /tmp/ip.txt. 我为此脚本创建了以下服务文件。

(/etc/systemd/system/test.service)
[Unit]
Description=test service

[Service]
ExecStart=/root/test.script

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

然后我启用了脚本,

systemctl enable test
Run Code Online (Sandbox Code Playgroud)

重新启动后,脚本确实会运行,但它会在网络启动之前运行。换句话说,中的输出ip.txt显示没有分配给主接口的 IPv4 地址。到我登录时,IPv4 地址确实已分配并且网络已启动。

我猜我可以通过弄乱WantedBy参数来改变脚本运行的点,但我不知道该怎么做。

有人能指出我正确的方向吗?

networkmanager systemd

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