Raspberry Pi е мощен SBC (едноплатен компютър), който можете да използвате за различни приложения и проекти. Неговата гъвкавост се крие в способността му да стартира всякакви програми, включително персонализирани скриптове, благодарение отчасти на Raspberry Pi OS и други базирани на Linux операционни системи, които работи.
Стартирането на скрипт или програма на Raspberry Pi е толкова просто, колкото да ги намерите в системата и да ги изпълните. Но какво, ако искате да автоматизирате този процес, може би защото вашият проект го изисква или защото искате да рационализирате работния си процес?
Един от отговорите на това е да научите как да използвате systemd.
Какво е Systemd?
systemd е набор от системни компоненти за конфигуриране на услуги и поведение на съвременните Linux системи. Идентифицира се с PID (идентификатор на процеса) от 1, тъй като това е първият процес за стартиране при стартиране на системата. Като цяло целта на systemd е да ви помогне с управлението и изпълнението на програми при стартиране на системата. И това е, което ще използвате, за да стартирате програмата си при стартиране на Pi.
Както бе споменато първоначално, има няколко метода за стартиране на програми при стартиране на Linux системи, като rc.local, cron и autostart. Въпреки това, systemd се случва с по-добро решение на партидата, ако искате да стартирате GUI (графичен потребителски интерфейс) програми, автоматизирайте приложенията, които да се изпълняват след започване на определени системни процеси, или изпълнявайте програми отново и отново до вашия график върши работа.
Свързани: Как да планирате задачи в Linux с Cron и Crontab
Как да използвам systemd за стартиране на програми при стартиране
systemd е малко по-сложен метод за стартиране на програми при стартиране на Linux системи. Обаче гъвкавостта на графика, която предлага пред други методи - тези, които споменахме по-горе, напълно надвишава неговата сложност във всеки аспект.
Методът systemd използва единични файлове, които са нещо като .ini файлове, които съдържат информация за кодиране на устройства, услуги, сокети, цел за стартиране и други основни компоненти на системата.
Единичните файлове са от различни типове. И така, въз основа на какъв вид ресурс искате да декларирате, трябва да изберете съответно типа на единичен файл. За целите на това ръководство обаче ще се придържаме към файловете на .service unit, които ви позволяват да управлявате стартовото поведение на програми и скриптове в системата.
По-долу е представена разбивка на стъпките, включени в стартирането на скрипт / програма при стартиране с помощта на systemd.
Създаване на услуга
За да настроите програмата си да се стартира при стартиране, създайте файл на сервизна единица, който ще каже на systemd коя програма да стартира и кога. Ето как да го направите.
- В прозореца CLI въведете sudo nano /lib/systemd/system/display.service. Можете да използвате всяко име за вашата услуга, стига да завършва с разширението .service.
- В сервизния файл поставете следните редове код:
[Мерна единица]
Описание = PiCounter
След = network.target
[Обслужване]
ExecStart = / usr / bin / python3 /home/pi/PiCounter/display.py
Рестартиране = винаги
Потребител = pi
[Инсталирай]
WantedBy = multi-user.target
Всички ваши общи опции за конфигурация попадат в Мерна единица и Инсталирай раздели, докато специфичните за услугата опции за конфигурация отиват в раздела Услуга.
Няколко от горните двойки стойност-директива, които може да се наложи да промените, включват:
i. След: Той определя кога да започне услугата. Задаване на network.target гарантира, че изброената стойност - network.target в този случай - започва преди да започне текущата единица. Въпреки това, той не насочва връзка към зависимост, която услугата да задейства; това става чрез други директиви като Wants, Requires и WantedBy.
Разбира се, можете да промените тази стойност според вашите изисквания за проекта. Например, ако искате програмата ви да се изпълни, след като Raspberry Pi се свърже с мрежа, можете да използвате network-online.target стойност. Можете да се обърнете към Документацията на Fedora за systemd за да научите повече за тези ценности.
ii. ExecStart: Той съдържа абсолютния път и името на програмата / скрипта, които искате да изпълните при стартиране. Така че в зависимост от това, което искате да изпълните, трябва да добавите стойности и за двете тези директиви.
iii. Потребител: Той идентифицира името на вашия Raspberry Pi. Ако сте променили името на своя Pi, трябва да въведете тази стойност за потребителя.
iv. Търси се от: Това е най-често срещаният начин за определяне на спусъка за единица. Като го настроите на multi-user.target, можете да установите връзка на зависимост, която ще стартира програмата, когато системният контрол бъде предаден на многопотребителската обвивка.
Нещо повече, това също стартира вашата програма преди стартирането на системата X-Windows на Pi, което означава, че програмата ви работи дори преди да влезете в системата. В случай, че искате да се изпълни скрипт, преди да влезете във вашия Raspberry Pi, това ви позволява да го направите.
Горните редове код работят за програми, които не са с GUI. Ако обаче искате да стартирате GUI програма с помощта на systemd, трябва да добавите следния код към вашия сервизен файл:
[Мерна единица]
Описание = PiCounter
След = network.target
[Обслужване]
Околна среда = Дисплей =: 0
Околна среда = XAUTHORITY / home / pi / .Xauthority
ExecStart = / usr / bin / python3 /home/pi/PiCounter/display.py
Рестартиране = винаги
[Инсталирай]
WantedBy = multi-user.target
В горната двойка директива-стойност всичко, което трябва да промените, е стойността за ExecStart директива. Заменете този в кодовия блок с програмата, която искате да стартирате при стартиране. След като попълните служебния файл, натиснете CTRL + O за да го запазите.
Тествайте услугата
Когато услугата е готова, ръчно проверете дали работи. За това въведете следната команда в терминала: sudo systemctl старт display.service. Услугата трябва да изпълнява вашите инструкции успешно.
След като го направи, прекратете го с sudo systemctl stop display.service.
Активирайте услугата
Ако сте успели да стартирате програмата си успешно с помощта на услугата, е време да я активирате, така че тя да изпълнява програмата ви автоматично всеки път, когато стартирате вашия Raspberry Pi.
За да направите това, напишете sudo systemctl разреши display.service в прозореца на терминала. И щом това стане, влезте sudo рестартиране за да рестартирате вашия Pi.
След като вашият Raspberry Pi стартира, systemd трябва да стартира вашата програма според предоставените инструкции.
Автоматизирано стартиране на програма при стартиране на Raspberry Pi
Подобно на повечето системи Linux, Raspberry Pi OS също ви позволява да извършвате операции по няколко начина и остава вярно и за планирането на стартирането на програмите. Така че, ако искате да стартирате GUI програми / скриптове при стартиране и искате по-добър контрол върху вашето планиране, systemd очевидно е по-добър метод.
Въпреки това, ако искате по-просто решение или изискванията на вашия проект изискват конкретно планиране, можете да проверите нашето ръководство за Стартиране на програма или скрипт Raspberry Pi при стартиране да научиш повече.
Искате ли да получите повече от вашия Raspberry Pi? Ето много полезни команди за навигация на терминала на Pi и програмиране на неговите GPIO пинове.
Прочетете Напред
- Направи си сам
- Raspberry Pi
Яш е писател на персонала в MUO за „Направи си сам“, „Linux“, „Програмиране“ и „Сигурност“. Преди да открие страстта си в писането, той се е развивал за мрежата и iOS. Можете също да намерите неговото писане в TechPP, където той обхваща други вертикали. Освен технологиите, той обича да говори за астрономия, Формула 1 и часовници.
Абонирайте се за нашия бюлетин
Присъединете се към нашия бюлетин за технически съвети, рецензии, безплатни електронни книги и ексклузивни оферти!
Още една стъпка…!
Моля, потвърдете имейл адреса си в имейла, който току-що ви изпратихме.