systemd 服务未重定向到不同的日志文件

systemd 服务未重定向到不同的日志文件

我下面有 systemd 服务,如果我尝试将应用程序/服务输出重定向到不同的文件,它不起作用。默认情况下,日志重定向到 /var/log/messages,尽管我在系统服务中定义了日志文件( StandardOutput=file:/var/log/mylogfile.log 和 StandardError=file:/var/log/mylogerror.log )

我需要帮助来解决这个问题

操作系统:Cent OS 7

rsyslog:服务正在运行

[Unit]
Description=my-apps
After=network.target

[Service]
User=root
Group=root
EnvironmentFile=/apps/config
WorkingDirectory=/apps
Environment="PATH=/apps/pyenv/bin/activate"
ExecStart=/apps/pyenv/bin/python /apps/mycode.py

StandardOutput=file:/var/log/mylogfile.log
StandardError=file:/var/log/mylogerror.log

答案1

CentOS 7(版本219)中的systemd版本不支持StandardOutput=file:.../StandardError=file:...语法,仅在systemd版本236中添加:

StandardOutput=
     Controls where file descriptor 1 (STDOUT) of the executed processes is connected to. Takes one of inherit, null, tty, journal, syslog, kmsg, journal+console, syslog+console, kmsg+console or
           socket.

(来自 CentOS 7 中的 systemd.exec 手册页)。

我认为由于您没有指定有效值,因此journal使用默认值并且日志将所有内容转发到系统日志:

日志将标准输出与可通过journalctl(1)访问的日志连接起来。请注意,写入 syslog 或 kmsg(见下文)的所有内容也隐式存储在日志中,因此下面列出的特定两个选项是该选项的超集。

除了日志之外,syslog 将标准输出连接到 syslog(3) 系统 syslog 服务。请注意,日志守护进程通常配置为将其收到的所有内容转发到系统日志,在这种情况下,此选项与日志没有什么不同。

如果您能够修改 python 应用程序,则可以使用 pythons记录模块记录到文件:

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')

相关内容