Како покренути Линук програм при покретању са системд-ом

Требате покренути Линук програм при покретању? Системд софтвер пружа начин да се то уради на било којој дистрибуцији Линук-а са системд-ом — којих је већина ових дана, укључујући Убунту. Провешћемо вас кроз процес креирања интегрисане услуге—и она чак разговара са часописом.

Овај водич показује како да подесите системску услугу која се покреће када покренете систем. Да бисте покренули графички програм када се пријавите, уместо тога користите менаџер покретања радне површине.

Покретање програма при покретању

Понекад се софтвер који инсталирате на свом рачунару укључује у процес покретања Линук-а, тако да се програм аутоматски покреће сваки пут када се рачунар покрене. Ово исто понашање можете лако постићи са сопственим програмима и скриптама, или у ствари било којим другим програмом који се налази на вашем рачунару.

Програме који се покрећу при покретању контролише системд, систем и сервис менаџер. системд је први процес који се покреће при покретању. Увек јесте ИД процеса (ПИД) 1. Сваки други процес који се покреће на вашем рачунару покреће системд или процес који је системд већ покренуо.

Програми који раде у позадини се позивају демони или услуге. „д“ на крају системд означава демона. У овом чланку ћемо направити пример услуге. Да бисте означили сва поља, наша услуга мора бити:

Интегрисан са системд-ом преко датотеке сервисне јединице
Покренут при покретању
Може се контролисати помоћу системцтл, тхе контролни интерфејс за системд
Може да пише у часопис

Креирање сервисног програма

Морамо да имамо програм који ће системд покренути. Направићемо једноставну скрипту, названу “хтг.сх”. Овај водич користи уређивач текста Гедит, али можете користити било који уређивач текста који желите.

touch htg.sh
gedit htg.sh

Отвориће се уређивач гедит. Копирајте и налепите следећи текст у уређивач.

#!/bin/bash

echo "htg.service: ## Starting ##" | systemd-cat -p info

while :
do
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
echo "htg.service: timestamp ${TIMESTAMP}" | systemd-cat -p info
sleep 60
done

Сачувајте промене и затворите уређивач.

  Како управљати групама и корисницима на Линук-у

Сценарио не ради пуно, али има неколико тачака које вреди напоменути.

Две ехо линије пролазе кроз системд-цат, програм који преузима излаз из програма и шаље га у дневник. Уноси у часопис имају приоритет. Користимо опцију -п (приоритет) да назначимо да су наше поруке само информативне (информационе). То нису важне грешке или упозорења.
Постоји бесконачна петља вхиле.
Променљива ТИМЕСТАМП је подешена на тренутни датум и време. Ово се форматира у поруку и шаље у часопис.
Скрипта тада спава 60 секунди.
Након 60 секунди петља се понавља. Дакле, ова скрипта уписује временску поруку у дневник једном у минути.

Копираћемо скрипту у директоријум /уср/лоцал/бин.

sudo cp htg.sh /usr/local/bin

И морамо да га учинимо извршним:

sudo chmod +x /usr/local/bin/htg.sh

Креирање датотеке сервисне јединице

Сваки програм који покреће системд има датотеку дефиниције, која се зове датотека сервисне јединице. Ово садржи одређене атрибуте које системд може користити да лоцира и покрене програм и да дефинише неке од његових понашања.

Морамо да креирамо јединичну датотеку за нашу нову услугу, али је мудро да се уверимо да ниједна од постојећих датотека јединица нема име које желимо да дамо нашој новој услузи.

sudo systemctl list-unit-files --type-service

Можете да се крећете кроз листу датотека јединица, која је поређана по абецедном реду, и проверите да име које желите да користите није заузето.

Наша услуга ће се звати „хтг.сервице“. Ниједан јединични фајл нема то име, тако да можемо да наставимо и креирамо нашу јединичну датотеку.

sudo gedit /etc/systemd/system/htg.service

Отвориће се уређивач гедит. Копирајте и налепите следећи текст у уређивач:

[Unit]
Description=How-To Geek Service Example

Wants=network.target
After=syslog.target network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/htg.sh
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target

Сачувајте промене и затворите уређивач.

Уноси имају ова значења. Ово су типични уноси. Нашој једноставној услузи заправо већина њих није потребна, али њихово укључивање нам омогућава да их објаснимо.

  Како направити резервну копију Друпал сајта на Линук-у

Опис: Ово је текстуални опис ваше услуге.
Жели: Наша услуга жели — али не захтева — да мрежа буде активна пре него што се наша услуга покрене.
После: Листа назива јединица које треба покренути након што је ова услуга успешно покренута, ако већ нису покренута.
Тип: Једноставан. системд ће сматрати да је ова услуга покренута чим се процес који је навео ЕкецСтарт раздвоји.
ЕкецСтарт: Пут до процеса који треба да се покрене.
Поново покрени: Када и ако услугу треба поново покренути. Поставили смо га на „у случају квара“.
РестартСец: Колико дуго треба чекати пре него што покушате да поново покренете услугу. Ова вредност је у секундама.
КиллМоде: Дефинише како системд треба да убије процес ако тражимо од системцтл да заустави услугу. Имамо ово подешено за „обраду“. Ово узрокује да системд користи сигнал СИГТЕРМ само у главном процесу. Да је наша услуга не-тривијалан програм уместо једноставне скрипте, поставили бисмо ово на „мешано“ како бисмо осигурали да су сви покренути процеси такође прекинути.
ВантедБи: Ово је подешено на „мулти-усер.таргет“, што значи да сервис треба да се покрене све док је систем у стању у којем више корисника може да се пријави, без обзира да ли је графички кориснички интерфејс доступан или не.

Датотека јединице не мора да буде извршна, али дозволе за јединичну датотеку треба да ограниче ко може да је уређује. Не желите да злонамерни или несташни корисник мења датотеку јединице тако да она извршава потпуно другачији програм.

Ова команда ће власнику дати дозволе за читање и писање и дозволе за читање групи. Други неће имати дозволе.

sudo chmod 640 /etc/systemd/system/htg.service

Можемо да натерамо системцтл да провери синтаксу наше јединице датотеке за нас, чак и ако услуга још није покренута. Све грешке ће бити пријављене. (У ствари, део „.сервице“ је опциони за већину команди.)

systemctl status htg.service

Ниједна грешка није истакнута, што значи да је наш јединични фајл синтаксички исправан.

  Како да генеришете прилагођене листе речи на Кали Линук-у са црунцх-ом

Покретање услуге

Када додате нову јединичну датотеку или уредите постојећу, морате рећи системд-у да поново учита дефиниције датотеке јединице.

sudo systemctl daemon-reload

Ако желите да се услуга покрене при покретању, морате је омогућити:

sudo systemctl enable htg

Омогућавање услуге не покреће је, већ само поставља да се покрене у време покретања. Да бисте сада покренули услугу, морате користити системцтл са опцијом старт.

sudo systemctl start htg

Верификација услуге

Након ручног покретања услуге или након поновног покретања рачунара, можемо да проверимо да ли наша услуга ради исправно.

sudo systemctl status htg.service

Статус услуге је приказан за нас.

Зелена тачка значи да наша услуга ради без проблема.
Назив услуге је “хтг.сервице”, а дуг опис је онај који смо дали у јединици.
Показано нам је која је датотека јединице учитана „/етц/системд/систем/хтг.сервице“.
Услуга је активна, а за нас је наведено време када је сервис покренут.
Његов ПИД је 7762.
Постоје два задатка повезана са услугом.
Укупно 928 Кибибајти меморије користи сервис.
Контролна група укључује скрипту „хтг.сх“ и команду за спавање, коју је покренуо „хтг.сх“. Већину времена, команда спавања ће обављати посао за ову услугу.

Такође нам је приказано последњих 10 уноса у дневник које је произвела ова услуга. Није изненађујуће, сви су у размаку од једног минута.

Заустављање и онемогућавање услуге

Ако треба да зауставите услугу, то можете учинити са овом командом:

sudo systemctl stop htg.service

Ово зауставља услугу, али је не спречава да се поново покрене следећи пут када се рачунар поново покрене. Да бисте зауставили покретање услуге при покретању, потребно је да је онемогућите:

sudo systemctl disable htg.service

Ако је услуга покренута, ова команда је не зауставља. Једноставно говори системд-у да не покреће услугу при следећем поновном покретању.

Ако желите да зауставите услугу и спречите да се покрене при покретању, користите обе команде.

Сервисни савет

Уверите се да ваш програм ради како се очекује пре него што покушате да га покренете као услугу.