Как добавить скрипт в автозагрузку Linux

Обновлено: 07.07.2024

Известные сервисы в Linux можно без проблем добавлять во время загрузки, потому что большинство из них идут со своим скриптом, который делается с помощью команд «chkconfig» и «systemctl».

Для системы инициализации Sys V:

Для системы systemd:

Иногда может потребоваться добавить пользовательский сценарий, команду или службу при запуске/загрузке. Если да, то как вы это делаете?

В этой статье давайте разберемся, как использовать следующие три метода для его реализации:

  • Использование файла /etc/rc.d/rc.local
  • Использование файла crontab
  • служба systemd

Способ 1: использование файла /etc/rc.d/rc.local

Файл «/etc/rc.local» традиционно выполняется после запуска всех обычных компьютерных служб в конце процесса переключения на многопользовательский уровень выполнения.

Этот метод также работает в системе systemd, и вам нужно добавить расположение вашего скрипта в файл ‘/etc/rc.d/rc.local’, чтобы он запускался при загрузке.

Убедитесь, что у файла есть разрешение на запуск исполняемого файла.

Чтобы понять это подробнее, мы создадим простой скрипт, как показано ниже, но вы можете создать любой скрипт по мере необходимости:

После того как сценарий будет готов, установите права доступа к исполняемому файлу, как показано ниже:

Наконец добавьте скрипт в конец файла:

Перезагрузите систему, чтобы проверить это:

Метод 2: Использование файла crontab

cron автоматически выполняет запланированные задания в серверной части в определенное время.

Этого легко добиться с помощью специальной строки "@reboot" с заданием cron.

@reboot — это специальная строка, которая позволяет пользователю запускать любую команду или сценарий при запуске (во время загрузки).

В этом примере файл ‘/opt/scripts/run-script-on-boot.sh’ запускается при перезагрузке системы.

Мы будем использовать тот же скрипт, который был создан в приведенном выше примере. Для этого просто добавьте следующую запись в файл crontab:

Перезагрузите систему, чтобы проверить следующее:

Способ 3: Использование сервисного модуля systemd

Этот метод работает только в системе systemd и очень прост.

Для этого вам нужно создать сценарий запуска systemd и поместить его в каталог «/etc/systemd/system/».

Это наш пример скрипта запуска systemd:

После того как вы поместите сценарий модуля в папку systemd, выполните следующую команду, чтобы обновить файлы конфигурации systemd и включить службу:

Перезагрузите систему, чтобы проверить следующее:

Дополнительные советы:

Если вы хотите запустить скрипт в фоновом режиме, вам нужно добавить завершающий символ амперсанда "&".

Если вы хотите запустить команду от имени другого пользователя, используйте следующий формат:

Заключение

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

Linux-сервер операционные системы редко используют графический интерфейс пользователя». /><br /></p>
<p>Одной из сильных сторон Linux как операционной системы является возможность ее настройки и настройки в соответствии с вашими вкусами. Использование командной строки позволяет вам выполнять мощные команды, недоступные для других пользователей ОС, а использование командной строки почти необходимо для получения максимальной отдачи от вашего дистрибутива Linux. Например, иногда вам может понадобиться запускать сценарий или команду при каждом запуске компьютера с Linux. Это можно сделать несколькими способами.</p>
<p>Поместите команду в файл crontab. Файл crontab в Linux — это демон, который выполняет редактируемые пользователем задачи в определенное время и при определенных событиях. Чтобы отредактировать файл, откройте терминал и введите «sudo crontab -e», чтобы открыть файл crontab в текстовом редакторе по умолчанию. В первой доступной строке введите «@reboot xxxx», где «xxxx» — это команда, которую вы хотите запустить. Сохраните файл и выйдите.</p>
<p>Поместите сценарий, содержащий команду, в каталог /etc. Создайте сценарий, такой как «startup.sh», используя ваш любимый текстовый редактор. Сохраните файл в каталоге /etc/init.d/. Измените разрешения сценария (чтобы сделать его исполняемым), набрав «chmod +x /etc/init.d/mystartup.sh».</p>
<p>Отредактируйте сценарий /rc.local с помощью текстового редактора. В системах Fedora этот скрипт находится в /etc/rc.d/rc.local, а в Ubuntu — в /etc/rc.local. После того, как вы добавите команды, которые хотите запустить (убедитесь, что вы делаете это от имени пользователя root), сохраните файл и выйдите. Команды будут запущены после следующего запуска.</p>
<p>Вольфрам Донат – специалист в области информационных технологий и писатель, который в настоящее время получает степень в области разработки компьютерных систем. Он успешно пишет как для онлайновой, так и для офлайновой аудитории, а также подрабатывает профессиональным копирайтером, насколько позволяет учеба. В настоящее время он продает свой первый роман агентам и издателям и усердно работает над вторым.</p>
<p>В этой статье я поделюсь примером файла модуля systemd, который вы можете использовать для запуска сценария при запуске с помощью systemd без использования crontab в RHEL/CentOS 7/8 Linux.</p>
<p>Еще несколько статей на похожую тему:</p>
<ul>
  <li><em>Как выполнить команду или скрипт с помощью systemd только при завершении работы, а не при перезагрузке в Linux</em></li>
  <li><em>Как выполнить команду или скрипт с помощью systemd прямо перед тем, как на терминале появится запрос на вход в систему в Linux</em></li>
  <li>Как выполнить команду или сценарий при запуске системы с помощью systemd без использования cronjob в Linux</li>
  <li><em>Как выполнить команду или сценарий после N минут загрузки (запуска системы) с помощью systemd в Linux</em></li>
  <li><em>Как остановить перезагрузку или завершение работы системы и прочитать ввод пользователя на этапе загрузки в Linux</em></li>
  <li><em>Как выполнить команду или сценарий с помощью systemd непосредственно перед завершением работы в Linux</em></li>
  <li><em>Как запустить службу от имени определенного пользователя или группы с помощью systemd в Linux</em></li>
</ul>
<p>Могут быть разные сценарии, когда вы ожидаете вызова скрипта или команды при запуске, например</p>
<ul>
  <li>Выполнить скрипт после N минут ожидания запуска</li>
  <li>Выполнить сценарий после загрузки всех служб systemd</li>
  <li>Выполнять скрипт сразу после появления запроса на вход</li>
  <li>Выполнять сценарий непосредственно перед появлением запроса на вход</li>
</ul>
<p>В этой статье я рассмотрю две темы, поскольку они почти похожи</p>
<ul>
  <li>Запускать скрипт при запуске с помощью systemd после того, как сеть будет доступна</li>
  <li>Выполнять скрипт при запуске после загрузки всех служб systemd</li>
</ul>
<p>Я буду использовать узел CentOS/RHEL 7/8 Linux, чтобы проверить шаги из этой статьи для запуска скрипта с systemd прямо перед запросом входа в систему.</p>
<h2>Шаг 1. Обзор systemd</h2>
<p>Надеюсь, вы уже знакомы с приведенными ниже темами</p>
<h2>Шаг 2. Создайте пример сценария</h2>
<p>Теперь, чтобы запустить скрипт при запуске с помощью systemd, сначала нам нужен скрипт или команда. Для этой статьи я создал фиктивный сценарий оболочки /tmp/startup_script.sh, который мы будем использовать для тестирования этой статьи.</p>
<p>Этот сценарий будет продолжать работать в течение 5 минут и каждую минуту будет выводить на экран оператор эха в виде широковещательного сообщения с использованием команды стены для всех пользователей Linux на соответствующем узле. И в конце 5-й минуты напечатает завершенную трансляцию. При этом мы также можем убедиться, что скрипт не будет уничтожен systemd, если он продолжает работать в течение 5 минут.</p>
<p>Предоставить скрипту разрешение на выполнение</p>
<p>Создайте новый файл сервисной единицы systemd со следующим содержимым:</p>
<p>Далее, чтобы активировать изменения, выполните следующую команду:</p>
<p>Включите службу, чтобы она вызывалась автоматически после перезагрузки</p>
<h2>Шаг 3. Создайте файл модуля systemd для другого сценария</h2>
<h3>Шаг 3.1. Запуск сценария при запуске с помощью systemd после того, как сеть станет доступной</h3>
<p>В этом сценарии мы выполним наш скрипт, как только сеть станет доступной, то есть когда network.target запустится на этапе загрузки с помощью After=network.target . Файл модуля должен находиться либо в /usr/lib/systemd/system, либо в /etc/systemd/system. Я размещу его в /etc/systemd/system, так как он используется для размещения пользовательского файла модуля.</p>
<h3>Шаг 3.2. Запуск сценария при запуске с помощью systemd после загрузки всех служб systemd</h3>
<p>Теперь в этом сценарии мы должны убедиться, что все службы systemd для соответствующей цели загружены перед запуском сценария. Таким образом, чтобы запускать скрипт при запуске с помощью systemd после загрузки всех служб systemd, мы должны соответствующим образом определить нашу директиву After=. Так как default.target будет варьироваться в зависимости от среды, поэтому вместо того, чтобы указывать конкретное имя цели, мы будем использовать After=default.target, чтобы systemd самостоятельно определял default.target и вызывал скрипт при запуске в Linux.</p>
<h3>Шаг 3.3. Запуск сценария при запуске с помощью systemd после появления запроса на вход</h3>
<p>Теперь и в этом сценарии мы будем играть только с директивой After= файла модуля. Теперь, поскольку требуется запустить скрипт при запуске с помощью systemd после появления запроса на вход, мы будем использовать After=getty.target</p>
<p>Вы также можете создать свою собственную справочную страницу со списком инструкций для сценария или пользовательского инструмента, который вы создали. В производственной среде реального времени всегда рекомендуется также создавать и выпускать справочную страницу для каждого сценария или инструмента, который мы разрабатываем.</p>
<p>Здесь, если вы заметили, мы определили After=network.target, чтобы убедиться, что скрипт</p>
<p>Обновите файлы конфигурации systemd и включите службу</p>
<h2>Шаг 4. Проверьте конфигурацию файла модуля systemd</h2>
<p>Теперь наша конфигурация готова для запуска скрипта при запуске в CentOS/RHEL 7/8 Linux.</p>
<p>Вы также можете использовать systemctl list-jobs внутри скрипта для отслеживания списка активных заданий, когда скрипт выполнялся при запуске.</p>
<p>Теперь после перезагрузки узла Linux мы видим, что наш startup_script.sh работает в фоновом режиме</p>
<p>Также через какое-то время мы начинаем получать широковещательные сообщения от пользователя root.</p>
<p>Я проверил сценарий для обоих сценариев для запуска сценария при запуске с помощью systemd (без crontab) в Linux, но я не привожу вывод из обоих сценариев, поскольку вывод в обоих случаях одинаков.</p>
<p>После загрузки используйте systemd-analyze plot > file.svg, чтобы создать образ процесса загрузки для проверки. Вы можете использовать любой браузер, чтобы просмотреть этот файл .svg и проверить процесс загрузки. После run-at-startup.service может запускаться одна или две недолговечных службы. Если это проблема, измените /etc/systemd/system/run-at-startup.service, чтобы установить Type=idle</p>
<p>Наконец, я надеюсь, что шаги из статьи по запуску сценария при запуске с помощью systemd без использования crontab в CentOS/RHEL 7/8 Linux были полезны. Итак, дайте мне знать ваши предложения и отзывы, используя раздел комментариев.</p>
<p>Похожие запросы: Как выполнить сценарий при запуске, как только сеть станет доступной в Linux. Как вызвать сценарий или выполнить команду при запуске Linux, когда в Linux отображается приглашение для входа в систему. Как выполнить скрипт с systemd при запуске, когда все службы systemd загружены в RHEL/CentOS 7/8 Linux с примерами. Как запустить скрипт при запуске с помощью crontab и задания cron. как добавить сценарии запуска в redhat linux 7. запуск сценария при запуске.</p>
<h2>Похожие записи</h2>
<p>Не нашли то, что искали? Выполните быстрый поиск в GoLinuxCloud</p>
<p>Если мои статьи о GoLinuxCloud помогли вам, пожалуйста, купите мне кофе в знак признательности.</p>
<p><img class=

Для любых других отзывов или вопросов вы можете использовать раздел комментариев или форму обратной связи.

Спасибо за поддержку!!

Подписаться на GoLinuxCloud

8 мыслей на тему «Как запустить скрипт при запуске с помощью systemd в Linux»

как можно написать ОДИН служебный файл для запуска перед выключением, перезагрузкой, а также ПОСЛЕ того, как сеть будет включена при запуске? Или это нельзя сделать для обоих в одном файле?
спасибо
богатый

Ожидается, что любая обычная служба systemd запустится при завершении работы, если ExecStop найден, аналогично ExecStart требуется для запуска службы во время перезагрузки, и если вы хотите, чтобы это произошло после сети, вы можете использовать After=network.target

Хотя для того, чтобы запустить службу перед выключением и рассмотреть другие сценарии, вы можете просмотреть различные статьи, которые я опубликовал на аналогичные темы.

Хорошо, но можно ли поместить ОБА в один служебный файл? Или часть выключения должна находиться в одном файле .service, а запуск - в отдельном файле .service?
спасибо
богатый

Я не вижу никаких проблем в наличии одного служебного файла. Пожалуйста, попробуйте и сообщите мне о своих результатах.

Получил эту ошибку. как исправить?

Вы можете проверить шаг 3.1, где я предоставил содержимое файла сервисного модуля systemd.

Вам нужно создать этот файл /etc/systemd/system/run-at-startup.service,
за которым следует systemctl daemon-reload

Я обновил статью, извините за ошибку. Я должен был добавить эту часть раньше.

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

Современный Linux сначала загружается в systemd, тогда как более старые версии Linux используют System V init. Оба метода будут запускать cron и rc.local перед загрузкой среды рабочего стола, такой как GNOME или KDE. С другой стороны, серверные дистрибутивы Linux будут запускать оболочку по умолчанию, такую ​​как Bash, после входа пользователя в консоль вместо загрузки среды рабочего стола.


Способы автоматического запуска программы при запуске Linux:

Автоматически запускать программу при запуске Linux через systemd

systemd — это стандартный системный и сервисный менеджер в современном Linux. Помимо прочего, он отвечает за выполнение программ и управление ими во время запуска Linux. Совместимые программы предоставляют файлы service unit, используемые systemd для управления выполнением программы.

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

Вам придется создать свой собственный сервисный модуль, если это пользовательская программа или если ваша программа не поставляется с ним во время установки.
Связано: Создание и изменение файлов системных модулей

включенный сервисный модуль выполняется во время загрузки

Автоматически запускать программу при запуске Linux через cron

cron — это демон для выполнения запланированных команд. Команды хранятся в таблице заданий cron или в crontab и уникальны для каждого пользователя в системе. Он запускается во время загрузки системы с помощью systemd или System V init, и вы можете запланировать выполнение своего задания или программы прямо во время загрузки системы, выполнив следующие действия:< /p>

Вы должны выбрать редактор для crontab, если пользователь впервые использует команду.

crontab будет создан для пользователя, выполняющего команду, и будет выполняться с использованием привилегий пользователя. Если вам нужно, чтобы ваша программа запускалась от имени пользователя root, запустите crontab -e от самого пользователя root.

@reboot определяет задание, которое будет выполняться во время загрузки системы.

По возможности используйте полный путь к своим программам и пишите команды в одну строку.

Файл сохраняется в /var/spool/crontab/

Автоматически запускать программу при запуске Linux через rc.local

rc.local является наследием системы System V init. Это последний сценарий, который необходимо выполнить перед переходом к экрану входа в среду рабочего стола или приглашению входа в систему на терминале. Обычно это сценарий оболочки Bash, из которого можно запустить что угодно.

Вы можете настроить свой скрипт rc.local, выполнив следующие действия:

Он должен начинаться с интерпретатора (/bin/bash) и заканчиваться кодом выхода (0 означает успех)

Файл будет выполнен от имени пользователя root во время загрузки системы

Автоматически запускать программу при запуске GNOME

GNOME — это среда рабочего стола по умолчанию для дистрибутивов Linux, таких как Ubuntu и Red Hat. GNOME можно настроить для запуска программ, когда пользователь входит в систему, и его можно настроить, следуя приведенной ниже статье:

Автоматически запускать программу при запуске KDE

KDE — еще одна популярная среда рабочего стола для Linux, которая используется по умолчанию в Kubuntu и openSUSE. Его можно легко настроить для запуска программ, когда пользователь входит в систему, как описано в следующей статье:

Автоматически запускать программу в новом сеансе Bash

Новая программа оболочки будет создана при запуске сеанса терминала. Bash — это оболочка по умолчанию для большинства дистрибутивов Linux, и при запуске она ищет следующие файлы в определенном порядке и выполняет их.

Эти файлы содержат команды и логику для установки правильных переменных среды и запуска необходимых программ на языке Bash. Он также настроен на нормальное выполнение других файлов, таких как /etc/bashrc, /etc/bash.bashrc и ~/.bashrc.

Вы можете отредактировать любой из этих файлов, чтобы ваша программа запускалась при запуске сеанса Bash. Ниже приведена часть типичного файла ~/.bashrc:

Ezoic

сообщить об этом объявлении


Автор: Мохд Шакир Закария
Облачный архитектор по профессии, но всегда считал себя разработчиком, предпринимателем и энтузиастом открытого исходного кода.

Читайте также: