%3F.png)
문제이긴 하지만여기에 노출됨매우 유사해 보이지만 제공된 솔루션 중 어느 것도 작동하지 않습니다. 문맥 :
- 라즈베리파이 제로 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
이 서비스는 시작 시 예상 세그먼트(관련 Wants
및 WantedBy
섹션)에서 올바르게 로드됩니다.하지만 내가 제공한 로그 파일에는 아무것도 기록되지 않습니다.. Python 실행 파일 호출에 전달된 인수를 사용하여 Environment
강제로 항목을 입력하는 것과 PYTHONUNBUFFERED
동일한 항목을 확인했습니다 . -u
이것은 전혀 효과가 없습니다.
CLI에서 정확히 동일한 exec 라인을 시작하면 스크립트가 실행되고 로그됩니다. 서비스 정의를 통해 로그가 전혀 없습니다.
참고 사항:
- 출력을 확인하면
journalctl
내 로그 줄을 찾습니다. logrotate
log2ram
로그 파일/디렉토리에 설정됩니다 .
결국 명령줄 /etc/rc.local
과 앰퍼샌드를 추가했습니다. 나는 이 서비스가 실행 중인 시스템과 관련하여 가능한 최선의 방법으로 이 서비스를 등록하고 싶기 때문에 이것은 나에게 맞는 것이 아닙니다.
귀하의 답변과 깨달음에 감사드립니다.
답변1
이런 방식으로 쉘 리디렉션을 사용해서는 안 됩니다. systemd는 쉘이 아니기 때문에 작동하지 않습니다. 오히려 지정하십시오.StandardOutput=
그리고StandardError=
저널이 아닌 다른 곳으로 전달하려는 경우 명시적으로.