Услугите на Linux стартират веднага щом системата ви се зареди или рестартира. Ето как можете да създадете автоматично стартираща се услуга systemd на вашия компютър с Linux.
systemd е мениджърът на услугите за много известни Linux дистрибуции. Услугата е единица от програма, която обикновено работи във фонов режим. Услугите по природа се стартират автоматично веднага щом системата се стартира и могат да работят без надзор.
Ако трябва да създадете автоматично стартираща се задача или програма, която да се изпълнява всеки път, когато стартирате или рестартирате системата си, можете да обмислите създаването на нова услуга. Нека научим как да създадем нова персонализирана услуга systemd на Linux.
Стъпка 1: Създаване на сервизния файл
Необходими са няколко стъпки за създаване на нов системен сервизен файл. Първият от тях е създаването на единичен файл за услугата. Преди да създадете сервизен файл, трябва да разберете неговата структура.
Нека проучим служебния файл, като изтеглим истински работещ сервизен файл от вашата Linux система. По-долу можете да видите сервизния файл за услугата vmtools daemon.
Тази конкретна услуга може да не присъства във вашата система, освен ако не работите и с Linux на VMware с инсталирани инструменти на VMware. Въпросната услуга не е важна, тъй като всички услуги, или по-скоро файловете на сервизни единици, имат една и съща основна структура с някои персонализации, както се изисква.
Всички системни служебни файлове трябва да имат три секции: [Обслужване], [Мерна единица], и [Инсталирай]и няколко параметъра под всеки раздел. Ето какво съдържа всеки раздел и защо са важни:
1. Мерна единица
The Мерна единица включва важни метаданни като описание и зависимости на услугата. Има три параметъра: Описание, Преди, и След. Както предполага същото, Описание параметър предоставя някакъв контекст на услугата и какво прави.
The Преди и След параметрите определят условията, които трябва да бъдат изпълнени, за да се изпълни услугата. Например, ако стартирате услуга на уеб сървър, бихте искали тя да стартира едва след като мрежовата услуга е онлайн. Така че бихте задали стойността на След параметър към мрежовата услуга.
2. Обслужване
The Обслужване раздел съдържа два задължителни параметъра: ExecStart, Типи няколко други незадължителни параметъра като ExecReload, и още.
ExecStart дефинира командата, която да бъде изпълнена при стартиране на услугата, докато Тип параметърът определя вида на процеса, който да се създаде.
3. Инсталирай
Този раздел и неговите данни се извикват всеки път, когато активирате или деактивирате услугата с командата systemctl.
Има няколко параметъра. Един от често срещаните и необходими е WantedBy. The WantedBy параметърът дефинира целевите единици, които трябва да стартират, когато услугата е активирана. Стойността по подразбиране е multi-user.target.
Параметрите, споменати тук, не са единствените параметри, които можете да зададете в единичен файл. Можете да получите пълния списък с параметри от официална документация за systemd.exec или като напишете човек systemd.exec в терминал.
Файлът на системната сервизна единица винаги завършва с ".обслужване" разширение и трябва да се съхранява в /etc/systemd/system/ указател. Създайте сервизния файл с помощта на командата докосване с повишени привилегии чрез префикс с the sudo команда:
sudo touch /etc/systemd/system/.обслужване
Сега, след като създадохте сервизния файл, нека да го попълним с необходимия синтаксис, за да направи услугата валидна и работеща.
Стъпка 2: Конфигуриране на сервизния файл
За демонстрация ще създадете примерна услуга, която се изпълнява Nmap за сканиране на портовете на вашето устройство и съхранява изхода във файл на всеки тридесет секунди. За да постигнете тази задача, ето как да структурирате файла на сервизната единица:
[Мерна единица]
Описание=Демонстрация на персонализирана услуга nmap.
След=network.target[Обслужване]
Тип=прост
Потребител=root
ExecStart=/usr/bin/nmap -sS -O -oN /home//results.txt локален хост
Рестартиране=винаги
RestartSec=30
[Инсталирай]
WantedBy=multi-user.target
Въпреки че параметрите, споменати тук, бяха обяснени по-рано, нека да разгледаме как те влияят на нашата новосъздадена услуга и също така да проучим новите, въведени в този модул: Рестартирам, RestartSec, и Потребител.
Ето какво означават параметрите във всеки раздел:
- Описание: Четим от човека текст за описание на функционалностите на услугата.
- След=network.target: Диктуване на systemd, от което зависи тази услуга network.target и трябва да започне само след network.target услугата е стартирана. Забележи, че След не се използва за установяване на връзка на пряка зависимост, той просто действа като тригер.
- Тип=прост: Има няколко вида услуги. Услугата в тази демонстрация обаче е редовен процес и затова го декларираме като такъв. Можете да намерите всички различни стойности за това на страницата с официална документация, свързана по-рано.
- Рестартиране=винаги: Това означава, че когато услугата излезе, тя винаги трябва да се рестартира.
- RestartSec=30: Това задава интервала между всяко стартиране на услугата на 30 секунди.
- Потребител=root: Това определя, че услугата ще работи като root потребител. В този случай това е задължителна стъпка, тъй като Nmap няма да може да работи без root привилегии.
- ExecStart: Тази директива съдържа абсолютния път до програмата, която трябва да бъде изпълнена, заедно с всички необходими флагове или аргументи, необходими за правилното функциониране на програмата.
- WantedBy=multi-user.target: Този параметър във файла на услугата указва коя цел трябва да включва или "иска" услугата. Когато дадена услуга е включена в цел, това означава, че услугата трябва да стартира, когато системата достигне тази цел по време на процеса на зареждане. В този случай услугата трябва да започне, когато системата влезе в режим на много потребители. Многопотребителският режим е състояние, при което системата е напълно заредена и позволява на множество потребители да влизат и да използват системата.
Стъпка 3: Активиране и стартиране на услугата
Сега, след като сте създали файла на модула, единствените останали стъпки за активиране на вашата услуга са активирането и стартирането й. Можете да активирате и стартирате вашата услуга с помощта на командата systemctl.
Ето как да използвате systemctl за активиране, стартиране и проверка на състоянието на вашата услуга:
sudo systemctl активиране .обслужване
sudo systemctl стартиране .обслужване
състояние на sudo systemctl .обслужване
Сега вашата персонализирана услуга трябва да работи! В този случай трябва да видите Nmap сканиране да се изпълнява на всеки тридесет секунди и изходът да се съхранява в резултати.txt файл в началната директория.
Настройването на systemd услуга на Linux е лесно!
Въпреки че първоначално настройването на персонализирана услуга от нулата може да изглежда обезсърчително, това е доста лесен начин за създадете самоизпълняващ се, необслужван процес, който да изпълнява повтарящи се задачи вместо вас и да стимулира вашия производителност.
В демонстрационната услуга ние едва надраскахме повърхността на това как можете да конфигурирате и настроите услуга. За да научите всичко за това как можете да персонализирате услугата си, препоръчваме ви да прегледате официалната документация, свързана в бележката.
Ако настройването и поддържането на услуга ви се струва твърде голяма задача, помислете за алтернативен начин за автоматизиране на повтарящи се задачи в Linux.