Поиск по сайту:
Нужно остерегаться доведения скромности до степени унижения (А. Бакиханов).

Как использовать Systemd для запуска Bash-скриптов при загрузке в Linux

24.04.2025
Как использовать Systemd для запуска Bash-скриптов при загрузке в Linux

Несколько дней назад я наткнулся на 32-битный дистрибутив CentOS 8 и решил протестировать его на старом 32-битном компьютере. После загрузки я понял, что в нём есть ошибка, из-за которой пропадает сетевое соединение. Каждый раз при перезагрузке мне приходилось вручную восстанавливать сетевое соединение, и я задумался: как можно автоматизировать этот процесс с помощью скрипта, который запускается при каждой загрузке системы?

Решение простое, и сегодня я покажу вам, как это сделать с помощью сервисов systemd, но прежде чем мы перейдём к этому, давайте вкратце рассмотрим, что такое сервис и как он работает.

В этой статье мы рассмотрим основы работы служебных модулей systemd, их связь с «целевыми объектами» и то, как настроить служебный модуль для запуска скрипта при загрузке. Мы будем говорить простым языком, уделяя внимание практическим шагам, чтобы вы знали всё необходимое для самостоятельной работы.

 

Что такое сервисный модуль Systemd?

Проще говоря, сервис в systemd — это файл конфигурации, который определяет, как сервис должен работать в вашей системе. Это может быть что-то вроде сетевой службы, программы или даже скрипта, который должен запускаться при загрузке компьютера или в определённый момент во время загрузки.

Эти служебные модули сгруппированы в целевые объекты, которые можно рассматривать как этапы или стадии процесса загрузки. Например, когда ваша система достигает многопользовательской цели (уровень выполнения 3), запускаются определённые службы. Вы можете рассматривать эти целевые объекты как «коллекции» служб, которые работают вместе на разных этапах загрузки.

Читать  Разница между «>» и «>>» в Linux

Если вы хотите просмотреть службы, работающие в определённой цели (например, graphical.target), вы можете использовать команду systemctl:
systemctl --type=service

 

Здесь вы увидите все активные службы в вашей текущей цели. Некоторые службы работают непрерывно, в то время как другие запускаются один раз, а затем завершают работу.

 

Проверка состояния службы

Если вам интересно, активна ли конкретная служба, вы можете использовать systemctl status для проверки:

systemctl status firewalld.service

 

Эта команда проверяет состояние службы брандмауэра. Вы увидите, что она активна, то есть работает, и включена, то есть запустится автоматически при следующей загрузке.

Вы также можете временно остановить службу (до следующей загрузки), используя:

systemctl stop firewalld.service
systemctl status firewalld.service

 

Это остановит службу брандмауэра на этом сеансе, но не помешает её запуску в следующий раз.

 

Включение и отключение Служб

Чтобы служба автоматически запускалась при загрузке, необходимо включить её, создав символическую ссылку в соответствующей папке:

systemctl enable firewalld.service

 

Чтобы отключить его, вам нужно просто запустить:

systemctl disable firewalld.service

 

Создание пользовательского сервисного подразделения

Чтобы настроить службу, которая запускает скрипт при загрузке, мы создадим новую служебную единицу в каталоге /etc/systemd/system. Здесь вы увидите существующие служебные файлы и папки для разных целей.

cd /etc/systemd/system
ls -l

 

Давайте создадим собственное служебное подразделение под названием connection.service с помощью Vim или вашего предпочтительного текстового редактора:

vim connection.service

или
vi connection.service

 

Читать  Как установить время ожидания в cURL

Добавьте в файл следующее содержимое.

[Unit]
Description=Bring up network connection
After=network.target

[Service]
ExecStart=/root/scripts/conup.sh

[Install]
WantedBy=multi-user.target

 

Объяснение:

  • [Unit]: Метаданные устройства. Мы дали ему описание и указали, что он должен запускаться после network.target, то есть он будет работать только после инициализации сети.
  • [Service]В этом разделе определяется команда, которая будет выполняться при запуске службы. В данном случае запускается скрипт conup.sh.
  • [Install]Этот раздел сообщает systemd, что служба должна быть загружена на многопользовательском уровне, который является стандартным уровнем запуска для большинства систем.

 

Теперь включите службу, чтобы она автоматически запустилась при следующей загрузке:

systemctl enable connection.service

 

Вы можете подтвердить, что он был включен, проверив каталог multi-user.target.wants:

ls -l multi-user.target.wants/

 

Символическая ссылка на connection.service теперь должна присутствовать. Однако нам всё равно нужно создать скрипт, который будет запускать этот сервис.

 

Создание скрипта

Теперь давайте создадим скрипт conup.sh, который запустит сетевое подключение.

cd /root
mkdir scripts
cd scripts
vi conup.sh

 

Добавьте следующую строку, чтобы включить сеть. Здесь скрипт использует команду nmcli для включения сетевого подключения на интерфейсе enp0s3.

#!/bin/bash
nmcli connection up enp0s3

 

Не забудьте сделать скрипт исполняемым.

chmod +x conup.sh

 

На этом этапе сервис готов к работе.

 

Тестирование сервиса

Чтобы протестировать его без перезагрузки, вы можете запустить вручную.

systemctl start connection.service

 

Если всё настроено правильно, служба выполнит скрипт, и ваше сетевое подключение будет восстановлено.

Читать  Как архивировать файлы и каталоги в Linux

В качестве альтернативы, если вы написали более простой скрипт, например touch /tmp/testbootfile, вы можете проверить, был ли создан файл в /tmp, чтобы убедиться, что служба работает должным образом.

 

Заключение

К этому моменту вы должны хорошо понимать, что такое служебные модули systemd и как их создавать и управлять ими в вашей системе. Вы также автоматизировали распространённую задачу — включение сетевого подключения при загрузке с помощью простого служебного модуля.

Надеемся, что это руководство поможет вам лучше управлять службами, целями и сценариями в systemd, сделав вашу систему более автоматизированной и эффективной.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:



Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

**ссылки nofollow

Это может быть вам интересно


Рекомендуемое
Много лет пользуетесь Ubuntu, и хотите перейти на более продвинутую…

Спасибо!

Теперь редакторы в курсе.