Системный скрипт Python не регистрирует данные (причина буфера)?

Системный скрипт Python не регистрирует данные (причина буфера)?

Хотя проблемаздесь выставленокажется очень похожим, ни одно из предложенных решений не работает. Контекст:

  • Raspberry Pi Zero W, Raspbian Lite (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разделами).Но он ничего не регистрирует в предоставленном мной файле журнала.. Вы замечаете Environmentвход в силу PYTHONUNBUFFEREDи то же самое с -uаргументом, переданным при вызове исполняемого файла Python. Это не имеет никакого эффекта.

Если я запускаю точно такую ​​же строку exec в CLI, скрипт запускается И регистрирует. Через определение службы вообще нет журнала.

Заметки на полях:

  • Если я проверю journalctlвывод, то найду свои строки журнала
  • logrotateи log2ramнастраиваются в файле журнала/каталоге

Я закончил тем, что добавил свою командную строку, /etc/rc.localза которой последовал амперсанд. По-моему, это не выход, так как я хотел бы зарегистрировать эту службу наилучшим возможным способом относительно системы, на которой она работает.

Спасибо за ваши ответы и разъяснения.

решение1

Не пытайтесь использовать перенаправления оболочки таким образом. Это не работает, потому что systemd не является оболочкой. Вместо этого укажитеStandardOutput=иStandardError=явно, если вы хотите, чтобы они были направлены куда-то, кроме журнала.

Связанный контент