Начало -> PYTHON -> Автоматично изпълнение на Python скрипт

Автоматично изпълнение на Python скрипт на Raspberry Pi


„автоматично изпълнение“:

Това е когато Python скрипт се стартира:

1) при стартиране на системата (boot)
2) периодично (напр. на всеки 5 мин)
3) при заявка (например през Flask API)
4) при събитие (бутон, сензор и т.н.)


1. Стартиране при boot (най-често използвано)

Създаваш service файл:

sudo nano /etc/systemd/system/readtemp.service

Пример:

[Unit]
Description=Read Temperature Script
After=network.target

[Service]
ExecStart=/home/user01/projects/project1/venv/bin/python /home/user01/projects/project1/python/read_temp.py
WorkingDirectory=/home/user01/projects/project1/python
User=user01
Restart=always

[Install]
WantedBy=multi-user.target

После:

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable readtemp.service
sudo systemctl start readtemp.service


sudo systemctl status readtemp.service



Всички услуги, които са enabled, т.е. автоматично стартиращи при boot:

systemctl list-unit-files --type=service | grep enabled

Тази команда показва само текущо активните (running) услуги:

systemctl list-units --type=service --state=running

Само активните услуги, които са и авто-стартиращи:

systemctl list-units --type=service --state=running | awk '{print $1}' | xargs -n1 systemctl is-enabled 2>/dev/null | grep enabled



Спиране на активна услуга (текущо стартиране). Това спира услугата веднага, но тя пак може да се стартира при следващ boot, ако е enabled.

sudo systemctl stop <име-на-услугата>.service


Деактивиране на авто-стартиране (премахване от boot). Услугата няма да се стартира автоматично при рестарт. 

sudo systemctl disable <име-на-услугата>.service



Има разлика между restart и start, и е важно да се разбере как работят при systemd:

start:
sudo systemctl start <услуга>.service

Стартира услугата незабавно, но не променя дали тя ще се стартира автоматично при следващ boot. Ако услугата е disabled, тя ще се стартира с тази команда, но след рестарт на системата пак няма да се стартира.

restart
sudo systemctl restart <услуга>.service

Първо спира услугата (ако работи), после я стартира отново. Точно като start, не променя auto-start настройката. Т.е. ако услугата е disabled, след рестарт на системата пак няма да се стартира автоматично. Ако е enabled, ще се стартира автоматично и при следващ boot.


--now при disable/enable

Когато комбинираш:

sudo systemctl disable --now <услуга>.service

Услугата спира веднага и деактивира авто-стартиране. Това е най-сигурният начин да „премахнеш“ услугата от активни и авто-стартиращи.


2. Автоматично изпълнение по график (cron)

Отваряш:

crontab -e

Пример:

*/5 * * * * /home/user01/projects/project1/venv/bin/python /home/user01/projects/project1/python/read_temp.py

Това ще го пуска на всеки 5 минути


Важно при cron:

Cron няма:

- същите environment variables
- активиран venv
- същия PATH

Затова винаги използвай пълни пътища.



Total views: 94 , Total comments: 0
Leave a comment
No comments

© Авторски права на scs3.eu Всички права са запазени. Проектиран и разработен от fibonachi@abv.bg 2021 - 2026.