我下面有 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ö')