我有一个以下服务文件:
[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) 我使用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。
$ 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)
然后在标准输出上,我可以看到日志级别,但仍然没有在日志中。