相关疑难解决方法(0)

如何在 Ubuntu 中查看 systemd 服务日志

我有一个以下服务文件:

[Unit]
Description=demo service
Requisite=mosquitto.service
BindsTo=mosquitto.service

[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/john/Documents/source/demo.py
Restart=on-failure
RestartSec=30s
StandardOutput=null

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

demo.service只是调用了Python代码demo.py。当我使用 启动服务时sudo systemctl start demo.service,它始终保持在auto-restart(failure)模式下。

demo.service - demo service
   Loaded: loaded (/etc/systemd/system/demo.service; enabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: exit-code) since Mon 2020-08-17 12:13:37 BST; 23s ago
  Process: 4744 ExecStart=/usr/bin/python3 /home/john/Documents/source/demo.py
 Main PID: 4744 (code=exited, status=1/FAILURE)
Run Code Online (Sandbox Code Playgroud)

我查过了syslog,但里面没有有用的信息。它仅显示演示服务启动和演示服务停止日志。

我可以从哪里获取其日志以了解服务未启动的原因。请帮忙。谢谢

以下是来自的日志journactl

Aug 13 13:51:40 john systemd[1]: Started demo service.
Aug 13 13:51:40 john systemd[1]: …
Run Code Online (Sandbox Code Playgroud)

python ubuntu service systemd

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

如何从Raspbian上的systemd服务正确重定向stdout/stderr?

我使用systemd在Raspbian(Jessie)上设置了一个服务,使其在启动后启动.守护程序配置如下所示:

[Unit]
After=multi-user.target

[Service]
Type=idle
User=root
ExecStart=/bin/sh -c "exec /home/pi/sources/mydaemon.py >> /home/pi/mydaemon.log 2>&1"

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

该重定向>>无效.我已经尝试了大多数可用的选项StandardOutput,StandardError但他们从未最终将我的脚本输出打印到/var/log/daemon.log,journalctl -u mydaemon.service只显示有关正在启动和停止的服务的消息.

我目前没有对脚本中的文件描述符做任何有趣的事情.我只是想让我的print()logging.info()陈述出现在我可以阅读的地方.有任何想法吗?

(为了清楚起见,守护进程必须以root身份运行.这可能与我的打印问题有关吗?)

python python-3.x raspberry-pi systemd raspbian

4
推荐指数
3
解决办法
4254
查看次数

python3:日志记录不显示日志级别?

这是我正在使用的python。

$ python3 --version
Python 3.5.2
Run Code Online (Sandbox Code Playgroud)

这是一些谷歌搜索后的测试代码(如何通过 Python 登录到 journald (systemd)?)。我正在尝试使用日志日志。

#!/usr/bin/python3

import logging
from systemd.journal import JournalHandler

log = logging.getLogger('test')
log.addHandler(JournalHandler())
log.setLevel(logging.DEBUG)
log.warning("warn")
log.info("info")
log.error("error")
log.debug("debug")
Run Code Online (Sandbox Code Playgroud)

我期待在日志中看到类似的内容:

WARNING: warn
INFO: info
ERROR: error
DEBUG: debug
Run Code Online (Sandbox Code Playgroud)

但这就是实际显示的内容:

Nov 22 09:29:56 host1 ./test_log.py[8997]: warn
Nov 22 09:29:56 host1 ./test_log.py[8997]: info
Nov 22 09:29:56 host1 ./test_log.py[8997]: error
Nov 22 09:29:56 host1 ./test_log.py[8997]: debug
Run Code Online (Sandbox Code Playgroud)

日志消息没有日志级别的前缀。谢谢您的帮助。

更多信息,

我也尝试格式化。

logging.basicConfig(format='%(levelname)s %(message)s')
Run Code Online (Sandbox Code Playgroud)

然后在标准输出上,我可以看到日志级别,但仍然没有在日志中。

python-3.x

0
推荐指数
1
解决办法
2564
查看次数

标签 统计

python ×2

python-3.x ×2

systemd ×2

raspberry-pi ×1

raspbian ×1

service ×1

ubuntu ×1