시스템 Python 스크립트가 기록되지 않습니다(버퍼 원인)?

시스템 Python 스크립트가 기록되지 않습니다(버퍼 원인)?

문제이긴 하지만여기에 노출됨매우 유사해 보이지만 제공된 솔루션 중 어느 것도 작동하지 않습니다. 문맥 :

  • 라즈베리파이 제로 W, 라즈비안 라이트 (2020-08-20)
  • python3 스크립트를 서비스로 등록하여 백그라운드에서 실행하고 싶습니다.

나는 다음 구성으로 작동하는 systemd를 사용하고 싶었습니다.

application.service에있다/etc/systemd/system/application.service

[Unit]
Description=application
After=multi-user.target


[Service]
User=custom_user
Type=idle
TimeoutSec=0
PIDFile=/run/application.pid
ExecStart=/usr/bin/python3 -u /path/to/application.py >> /path/to/log.log 2>&1
KillMode=control-group
Environment="PYTHONUNBUFFERED=1"

Restart=always
RestartSec=3s

[Install]
WantedBy=multi-user.target

이 서비스는 시작 시 예상 세그먼트(관련 WantsWantedBy섹션)에서 올바르게 로드됩니다.하지만 내가 제공한 로그 파일에는 아무것도 기록되지 않습니다.. Python 실행 파일 호출에 전달된 인수를 사용하여 Environment강제로 항목을 입력하는 것과 PYTHONUNBUFFERED동일한 항목을 확인했습니다 . -u이것은 전혀 효과가 없습니다.

CLI에서 정확히 동일한 exec 라인을 시작하면 스크립트가 실행되고 로그됩니다. 서비스 정의를 통해 로그가 전혀 없습니다.

참고 사항:

  • 출력을 확인하면 journalctl내 로그 줄을 찾습니다.
  • logrotatelog2ram로그 파일/디렉토리에 설정됩니다 .

결국 명령줄 /etc/rc.local과 앰퍼샌드를 추가했습니다. 나는 이 서비스가 실행 중인 시스템과 관련하여 가능한 최선의 방법으로 이 서비스를 등록하고 싶기 때문에 이것은 나에게 맞는 것이 아닙니다.

귀하의 답변과 깨달음에 감사드립니다.

답변1

이런 방식으로 쉘 리디렉션을 사용해서는 안 됩니다. systemd는 쉘이 아니기 때문에 작동하지 않습니다. 오히려 지정하십시오.StandardOutput=그리고StandardError=저널이 아닌 다른 곳으로 전달하려는 경우 명시적으로.

관련 정보