%3F.png)
Хотя проблемаздесь выставленокажется очень похожим, ни одно из предложенных решений не работает. Контекст:
- 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=
явно, если вы хотите, чтобы они были направлены куда-то, кроме журнала.