Я собрал скрипт автоматической проверки температуры, написанный на Python, который уведомляет меня, если он обнаруживает значение вне заданного диапазона, с намерением запустить его на безголовом Raspberry Pi. При исследовании того, как это сделать, быстро стало очевидно, что наиболее часто предлагаемый метод - это использование Systemd. К сожалению, я не смог воссоздать учебники, над которыми я работал большую часть дня, и решил, что пришло время обратиться за помощью.
Я не уверен, какую информацию предоставить здесь, так как Python скрипт работает совершенно нормально сам по себе. Тем не менее, это то, с чем я столкнулся при попытке создать службу:
[Unit]
Description=Temp Check Script
After=network.target
[Service]
ExecStart=/usr/bin/python3 -u TempCheck.py
WorkingDirectory=/home/pi/TempCheck
StandardOutput=inherit
StandardError=inherit
Restart=always
User=pi
[Install]
WantedBy=multi-user.target
А вот ошибки, которые я получаю при проверке статуса:
(code=exited, status=1/FAILURE)
Start request repeated too quickly.
Failed with result "exit-code"
Failed to start Temp Check Script
I ' Я старался изо всех сил задавать критические вопросы, делая это, чтобы лучше понять, что на самом деле означает каждая из этих вещей, но это первый день использования bash / systemd, поэтому, если вам интересно, почему именно я сделал конкретную вещь, ответ определенно будет либо невежество, либо потому что учебник сказал мне. Кстати, вот тот, на котором основана эта услуга -> https://www.raspberrypi.org/documentation/linux/usage/systemd.md
Большое спасибо за вашу помощь, я действительно ценю это!
Редактировать:
При запуске:
journalctl -u TempCheck.service
Я получаю несколько новых вещей, в том числе:
python3[404]: /usr/bin/python3 can't open file 'main.py': [Erno 2] No such file or directory
systemd[1]: TempCheck.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
systemd[1]: TempCheck.service: Failed with result 'exit-code'/
systemd[1]: TempCheck.service: Service RestartSec=100ms expired, scheduling restart.
systemd[1]: TempCheck.service: Scheduled restart job, restart counter is at 1.
systemd[1]: TempCheck.service: Stopped Temp Check Script
systemd[1]: TempCheck.service: Started Temp Check Script
Это повторяется несколько раз.
Я чувствую, что должен уточнить, с тех пор я продолжил просмотр учебников и т. Д. c. и изменил службу следующим образом:
[Unit]
Description=Temp Check Script
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/python /home/pi/TempCheck/TempCheck.py
User=pi
WorkingDirectory=/home/pi/TempCheck
StartLimitIntervalSec=10
Restart=on-failure
[Install]
WantedBy=multi-user.target
И недавно предоставленные расширенные сообщения об ошибках от этой службы, я полагаю
Edit 2:
Я понял один из учебных пособий, которые я читал, попросили включить:
#!usr/bin/python3
в начало моего сценария. С тех пор я удалил это. Теперь я вижу, что скрипт предположительно работает, но я не получаю никаких уведомлений, которые бы указывали на то, что он делает то, что должен (опять же, странный, потому что он полностью работает при запуске в IDE, а также непосредственно из командной строки) , Однако проверьте еще раз, и мы вернулись в состояние сбоя, на этот раз с первоначальной ошибкой:
(code=exited, status=1/FAILURE)
Start request repeated too quickly.
Failed with result "exit-code"
Failed to start Temp Check Script
Редактировать 3: При попытке с помощью crontab у меня тоже не получилось. Не уверен, почему это так, так как он в основном делает то же самое, что и при непосредственном вызове из командной строки, и при использовании CLI работает нормально. Это говорит мне о том, что в скрипте нет ничего плохого, и есть хороший шанс, что с systemd или crontab действительно нет ничего плохого, но между systemd / crontab и скриптом происходит что-то странное. Я дважды и трижды проверил каталоги, которые я его кормил, и они правильные. У меня совершенно нет идей.
Решение: не пытайтесь использовать переменные окружения в скрипте, просто объявите их прямо. Это лучшее, что у меня есть, хотя я буду продолжать искать способы ссылаться на переменные среды. Совет очень признателен.