linux - 등록 - systemctl httpd status



시스템 서비스 출력을 파일로 리디렉션하는 방법 (4)

시스템 서비스의 출력을 파일로 리디렉션하려고하는데 작동하지 않는 것 같습니다.

[Unit]
Description=customprocess
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/binary1 agent -config-dir /etc/sample.d/server
StandardOutput=/var/log1.log
StandardError=/var/log2.log
Restart=always

[Install]
WantedBy=multi-user.target

내 접근 방식을 수정하십시오.


Answer #1

systemd service 파일 자체에 stdoutstderr 파일을 추가하는 것이 좋습니다.

참조 : https://www.freedesktop.org/software/systemd/man/systemd.exec.html#StandardOutput=

구성 했으므로 다음을 좋아하지 않아야합니다.

StandardOutput=/home/user/log1.log
StandardError=/home/user/log2.log

그것은해야한다:

StandardOutput=file:/home/user/log1.log
StandardError=file:/home/user/log2.log

서비스를 다시 시작하고 싶지 않을 때 작동합니다 .

새 파일이 만들어지고 기존 파일에 추가되지 않습니다.

대신 사용하십시오 :

StandardOutput=append:/home/user/log1.log
StandardError=append:/home/user/log2.log

참고 : 디렉토리를 이미 작성했는지 확인하십시오. 디렉토리 생성을 지원하지 않는 것 같습니다.


Answer #2

로그가 이미 stdout / stderr 에 있고 시스템 장치의 로그가 /var/log/syslog 있다고 가정합니다.

journalctl -u unitxxx.service

Jun 30 13:51:46 host unitxxx[1437]: time="2018-06-30T11:51:46Z" level=info msg="127.0.0.1
Jun 30 15:02:15 host unitxxx[1437]: time="2018-06-30T13:02:15Z" level=info msg="127.0.0.1
Jun 30 15:33:02 host unitxxx[1437]: time="2018-06-30T13:33:02Z" level=info msg="127.0.0.1
Jun 30 15:56:31 host unitxxx[1437]: time="2018-06-30T13:56:31Z" level=info msg="127.0.0.1

rsyslog 구성 (시스템 로깅 서비스)

# Create directory for log file
mkdir /var/log/unitxxx

# Then add config file /etc/rsyslog.d/unitxxx.conf

if $programname == 'unitxxx' then /var/log/unitxxx/unitxxx.log
& stop

rsyslog를 다시 시작하십시오.

systemctl restart rsyslog.service

Answer #3

어떤 이유로 rsyslog를 사용할 수없는 경우 다음이 수행됩니다. ExecStart=/bin/bash -ce "exec /usr/local/bin/binary1 agent -config-dir /etc/sample.d/server >> /var/log/agent.log 2>&1"


Answer #4

이 오류가 발생할 수 있습니다.

Failed to parse output specifier, ignoring: /var/log1.log

systemd.exec(5) 매뉴얼 페이지에서 :

StandardOutput=

실행 된 프로세스의 파일 디스크립터 1 (STDOUT)이 연결되는 위치를 제어합니다. inherit , null , tty , journal , syslog , kmsg , journal+console , syslog+console , kmsg+console 또는 socket 하나를 사용 socket .

systemd.exec(5) 매뉴얼 페이지는 로깅과 관련된 다른 옵션을 설명합니다. systemd.service(5)systemd.unit(5) 매뉴얼 페이지도 참조하십시오.

또는 다음과 같은 것을 시도해 볼 수 있습니다 (모두 한 줄에).

ExecStart=/bin/sh -c '/usr/local/bin/binary1 agent -config-dir /etc/sample.d/server 2>&1 > /var/log.log' 




rhel7