systemd 서비스가 다른 로그 파일로 리디렉션되지 않습니다.

systemd 서비스가 다른 로그 파일로 리디렉션되지 않습니다.

아래에 시스템 서비스가 있는데 응용 프로그램/서비스 출력을 다른 파일로 리디렉션하려고 하면 작동하지 않습니다. 시스템 서비스에서 로그 파일을 정의했지만 기본적으로 로그는 /var/log/messages로 리디렉션됩니다( StandardOutput=file:/var/log/mylogfile.log 및 StandardError=file:/var/log/mylogerror . 통나무)

이 문제를 해결하려면 도움이 필요해요

운영 체제: CentOS 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

StandardOutput=file:...CentOS 7(버전 219)의 systemd 버전은 / 구문을 지원하지 않으며 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기본값이 사용되고 로그는 모든 것을 syslog로 전달합니다.

저널은 표준 출력을 저널ctl(1)을 통해 액세스할 수 있는 저널과 연결합니다. syslog 또는 kmsg(아래 참조)에 기록된 모든 내용은 로그에도 암시적으로 저장되므로 아래 나열된 특정 두 옵션은 이 옵션의 상위 집합입니다.

로깅 외에도 syslog는 표준 출력을 syslog(3) 시스템 syslog 서비스에 연결합니다. 로깅 데몬은 일반적으로 수신한 모든 것을 syslog로 전달하도록 구성되며, 이 경우 이 옵션은 로깅과 다르지 않습니다.

Python 애플리케이션을 수정할 수 있다면 Python을 사용할 수 있습니다.로깅 모듈파일에 로깅 중:

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ö')

관련 정보