Управление на стартиращи услуги и скриптове в Linux

В тази статия ще разгледаме основите на управлението на стартиращи услуги и скриптове в Linux CentOS 7/8. По-специално, ще анализираме основите на работата с демона systemd, научете се да добавяте услуги за стартиране и да ги премахвате от там, а също и да разгледате алтернативни опции за стартиране на скриптове или демони след стартиране на системата.

Целта на статията е да ви научи бързо да изчислявате списъци с услуги и скриптове, които стартират автоматично в Linux, да добавяте вашите услуги или скриптове за стартиране или да деактивирате автозапускането на определени програми.

Съдържание:

  • Systemd: контрол на стартиране на услугата в Linux
  • Автоматично стартиране на скриптове и услуги, използващи rc.local
  • Създайте свой собствен демон и го добавете към systemd
  • Автоматично стартиране през cron
  • .bashrc: скриптове за автоматично стартиране при стартиране на терминала

Systemd: контрол на стартиране на услугата в Linux

В повечето от популярните, модерни, популярни Linux дистрибуции (CentOS 7, RHEL, Debian, Fedora и Ubuntu) като стартови демон вместо това init.d се използва systemd. Systemd - Linux система и мениджър на услуги, използван за стартиране на други демони и управление на тях по време на работа, използва единични файлове от / etc / systemd / system (init.d използвани скриптове от директорията /etc/init.d/). Systemd ви позволява да паралелизирате стартирането на услуги по време на процеса на зареждане, като по този начин ускорява стартирането.

За да управлявате системата, използвайте командата systemctl.

Първо, след като заредим системата, ще проверим списъка с единици, към които се добавя в момента systemd:

systemctl списък-единици

Списъкът с единичните файлове може да се получи с командата:

systemctl списък-единица-файлове

Тази команда ще покаже всички налични файлове с единици (независимо дали са били заредени в systemd след зареждане на операционната система или не).

За да изброите активните услуги и тяхното състояние, направете:

# systemctl списък-единици - услуга

Следващата команда ще изброява елементите, които са изтеглили или се опитали да заредят systemd. Тъй като след стартирането някои устройства могат да станат неактивни, използвайки флага -всички ще получите пълен списък.

# systemctl списък-единици - всички

БЕЗОПАСНО АКТИВНО ПОДЛОЖЕНИЕ ОПИСАНИЕ proc-sys-fs-binfmt_misc.automount заредено активно чакане ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ exim.service не е намерен неактивен мъртъв exim. услуга firewalld.service заредена активен работещ firewalld - динамичен демон за защитна стена [email protected] заредена активна работа Getty на tty1 ● ip6tables.service не е намерена неактивна мъртва ip6tables.service ● ipset.service не е намерена неактивна мъртва ipset.service ● iptables. услуга не е намерена неактивни мъртви iptables.service Извеждане на мрежи нагоре / надолу ● NetworkManager-изчакайте онлайн.сервис не е намерен неактивен мъртъв 

Както можете да видите от списъка, тук се показват дори услуги, които не са намерени на устройството „не е намерено“..

Използвайки тази команда, можете да добавите други знамена, например:

  • -състояние - използва се за определяне на състоянието на демона Load, Active, Sub
  • -тип - ви позволява да филтрирате единици по тип.

примери:

systemctl списък-единици --all --state = active - ще изброява само активни единици

systemctl списък-единици -type = услуга - ще се покаже списък с единици, които са услуга.

Добавяне на услуга към systemd

За да управлявате услугите в systemd използва се специален синтаксис. След сървърите за имена в края трябва да посочите .обслужване. Например:

systemctl активиране nginx.service - командата ще добави nginx уеб сървъра за автоматично зареждане

Тази команда ще създаде символична връзка към копие на файла, посочен в командата за обслужване в директорията за автозапускане systemd.

# systemctl активирайте nginx.service

Създадена символна връзка от /etc/systemd/system/multi-user.target.wants/nginx.service към /usr/lib/systemd/system/nginx.service
Резултатът от тази команда показва в коя директория е създадена символната връзка към сервизния файл.

За да видите тази или онази услуга, добавена към автоматичното зареждане, можете да проверите състоянието й:

systemctl статус nginx.service

Когато извеждате, трябва да обърнете внимание на реда:

Заредено: заредено (/usr/lib/systemd/system/nginx.service; активиран; предварително зададена настройка на доставчика: деактивирана)

Активираната стойност означава, че тази услуга се зарежда автоматично (добавя се за автоматично зареждане). Ако услугата не се зарежда автоматично, тук ще бъде посочена деактивирана..

Премахване на услуга от systemd

Можете да премахнете услугата от стартиране, така че да не се стартира след стартиране на Linux (докато самата услуга не е изтрита от сървъра). За да премахнете услуга от стартиране, изпълнете командата:

systemctl деактивира Need_service

Например, за да премахнете nginx от стартиране, направете:

# systemctl деактивира nginx.service

Премахната символна връзка /etc/systemd/system/multi-user.target.wants/nginx.service

След като командата бъде изпълнена, символната връзка към сервизния файл ще бъде изтрита от директорията systemd. Можете да проверите дали устройството се стартира:

# systemctl е активиран sshd

Systemd: маскиране на единица

В моята практика имаше "вредни" услуги, които след отстраняването им от стартиране все още останаха там и започнаха след рестартирането на ОС. За да разрешите този проблем, можете да маскирате услугата:

systemctl маска nginx.service

И след това изобщо няма да стартира ръчно или след рестартиране на ОС:

# systemctl маска nginx.service

Създадена символна връзка от /etc/systemd/system/nginx.service до / dev / null.

# service nginx рестартиране

Пренасочване към / bin / systemctl рестартиране nginx.service Неуспешно рестартиране на nginx.service: Единицата е маскирана.

Можете да премахнете маската с командата:

# systemctl маскиране nginx.service

Премахната символна връзка /etc/systemd/system/nginx.service.

Ако след маскиране на услугата проверите файловете на единицата, ще видите, че услугата е маркирана като маскирана (състояние на маскиране):

По такъв прост начин можете да се спасите от изтриването на услугата, дори и да не е премахната при стартиране systemd.

Автоматично стартиране на скриптове и услуги, използващи rc.local

Най-често се използва за стартиране на различни скриптове при зареждане на Linux. rc.local.

Но освен скриптове, чрез rc.local можете също да стартирате услуги, дори и тези, които преминават през systemd. Не мога да отговоря на въпроса, защо да използвам в този случай rc.local, ако има systemd, но няколко примера ще дам.

Като начало, файла /etc/rc.local трябва да бъде изпълним:

chmod + x /etc/rc.local

Rc.local трябва да се добави към системния старт:

systemctl активиране на rc-local

И по примера на същото Nginx, можем да добавим rc.local команда за стартиране на уеб сървъра:

услуга nginx старт

Но рядко използвам rc.local за стартиране на услугите. По-често rc.local използва се, когато трябва да стартирате скрипт или да изпълните команда веднъж.

Например, създадох сценарий /root/test.sh който изпълнява някои действия и искам да го стартирам веднага след стартиране на системата. Добавете реда към файла rc.local:

sh /root/test.sh

Започвайки от CentOS 7, разработчиците посочват това rc.local остарял демон и автостарт скриптове или услуги чрез него, това е миналия век. Но докато работи, аз го използвам, тъй като е много лесен за работа.

Създайте свой собствен демон и го добавете към systemd

Можете да създадете свой собствен демон, който може да се контролира чрез systemd.

Например, трябва да стартираме един и същ скрипт /root/test.sh след рестартиране на системата. Нека започнем със създаването на файл за бъдещата ни услуга:

докоснете /etc/systemd/system/test-script.service
chmod 664 /etc/systemd/system/test-script.service
nano /etc/systemd/system/test-script.service

Съдържанието на файла ще бъде следното:

[Unit] Описание = Настройки на шаблона Service After = network.target [Service] Type = onehot User = root ExecStart = / root / test.sh [Install] WantedBy = multi-user.target 

Основни параметри:

Потребител - потребителят, под който демонът ще бъде стартиран

Type = onehot - процесът ще бъде завършен преди пускането на нови единици

Проверете и рестартирайте:
# systemctl презареждане на демон
# systemctl стартира тест-script.service
# systemctl status test-script.service

● test-script.service - Тестово заредено: заредено (/etc/systemd/system/test-script.service; деактивирано; настройка на доставчика: забранено) Активно: активно (работи) 

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

# systemctl активирайте test-script.service

Създадена символна връзка от /etc/systemd/system/multi-user.target.wants/test-script.service към /etc/systemd/system/test-script.service.

По този начин, можете да добавите всеки от вашия скрипт за стартиране чрез systemd.

Автоматично стартиране през cron

Ако трябва да стартирате скрипт или команда с някаква честота, можете да използвате Cron-ОМ:

кронтаб -е - отворете терминал, за да напишете cron задача

И добавете задачата, която ви трябва там, например:

* * * * * /root/test.sh - стартирайте скрипта всяка минута.

Можете да напишете сценарий часовник-куче, която при възлагане ще провери например състоянието на услуга и ако не работи, ще я стартира. В няколко от моите проекти използвам подобна схема.

За да изброите всички задачи в корони, трябва да изпълните командата:

# crontab -l

* * * * * /root/test.sh

Валидните стойности за началния час на заданията на cron са в ред:

  • Минути от 0 до 59
  • Часове от 0 до 59
  • Ден на месеца от 1 до 31
  • Месец 1 до 12
  • Ден от седмицата 0 до 7 (0 или 7 е неделя)

В нашата задача скриптът работи всяка минута, така че има "*".

Можете също да поставите необходимия скрипт в директории Cron:

  • /cron.daily - изпълнение на скрипт ежедневно
  • /cron.hourly - изпълнение на скрипт почасово
  • /cron.monthly - месечно изпълнение на скрипт
  • /cron.weekly - седмично изпълнение на скрипт

Скриптите в указаната директория ще се изпълняват според автоматично подготвения график.

.bashrc: скриптове за автоматично стартиране при стартиране на терминала

Ако трябва да извършите някои действия при стартиране на терминала SSH, можете да добавите всяка команда или изпълнение на скрипт към .bash_profile или .bashrc. Теоретично можете да добавите всяко действие към всеки от тези файлове, то ще се изпълни така или иначе. Обикновено към всичко се добавя всичко необходимо .bashrc, и себе си .bashrc изтичам .bash_profile.

Добавих към файла .bashrc команда за рестартиране на уеб услугата Nginx:

рестартиране на услуга nginx

След това записах файла и рестартирах терминала:

Както можете да видите, при стартиране на терминала, уеб сървърът е рестартиран. Какви действия могат да бъдат извършени при стартиране на терминала? Вероятно изпълнете някои помощни помощни програми, например проверка непрекъсната работа сървър:

Или искате, когато стартирате терминала, веднага да стигнете до необходимата директория и да стартирате mc, добавете към .bashrc

CD / var /
MC

Надявам се тази статия за управление на стартиране на услуги и скриптове в LInux (статията е написана за CentOS) се оказа полезна за вас. Със сигурност тези, които учат само основите на системното администриране на Linux, тази информация ще бъде полезна.