Как добавить скрипт в автозагрузку linux
Перейти к содержимому

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

  • автор:

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

Иногда пользователи могут столкнуться с необходимостью добавления каких-то сервисов или событий в автозагрузку Linux системы (Ubuntu, Debian, CentOS, Gentoo, Alpine Linux и так далее), но не всегда удается сделать это встроенным в графическую среду средствами (например Startup Applications в Ubuntu). То, как сделать простой скрипт и добавить его запуск при инициализации системы будет рассказано ниже.

Опишем это на простом примере: opendchub – это сервис dc-хаба, который может запускаться только под супер-пользователем (то есть он запускается вручную только командой sudo opendchub или непосредственно под root’ом).

Для начала создадим скрипт запуска в стандартном каталоге инициализации системы:

sudo nano /etc/init.d/odchub

В текстовом редакторе введите три строки будущего скрипта:

#!/bin/bash
echo «Opendchub starting. »
opendchub

Сохраните изменения (Ctrl+O) и выйдите из текстового редактора nano (Ctrl+X)
В первой строке этого скрипта указывается интерпретатор (если вы не знакомы с этим понятием, то лучше оставить именно такой как указан выше).
Во второй строке, командой echo обеспечивается простой вывод на экран текста – в принципе эта строка необязательна, она лишь будет информировать пользователя о том, какое действие происходит в данный момент.
Третьей строкой собственно указывается команда запуска (в нашем примере – это сервис opendchub) – пишется тут всё точно также, как вы выполняли необходимую команду в терминале, за исключением того, что не надо добавлять ‘sudo‘ – так как этот скрипт будет выполняться при инициализации системы, то есть уже сразу под суперпользователем.

После того как файл создан, сделаем его исполняемым:

sudo chmod +x /etc/init.d/odchub

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

Если вывод команды:

в вашем дистрибутиве покажет “systemd”, то рекомендуем создать systemd unit, в других случаях стоит прибегнуть ко второму описаному решению, init.
Systemd и init – это разные системы инициализации, используемые в Linux. Изначально массово использовалась init, но последние годы во всё большем количестве дистрибутивов используется systemd. Стоить добавить, что это не единственные системы инициализации, но как правило большинство из них поддерживают синтаксис init.

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

sudo nano /etc/systemd/system/odchub.service

В текстовом редакторе скопируйте следующие строки в этот файл:

[Unit]
Description=Opendchub service
After=network.target
[Service]
ExecStart=/etc/init.d/odchub
[Install]
WantedBy=multi-user.target

Сохраните изменения (Ctrl+O) и выйдите из текстового редактора nano (Ctrl+X).
Description – заполняентся произвольно, это просто описание юнита.
After=network.target – означает, что эта служба сможет быть запущена только после поднятия сетвых сервисов.
ExecStart – путь к исполняемому файлу, будет выполнять при старте службы.
WantedBy=multi-user.target – означает, что будущий сервис будет запускаться после активации цели multi-user.target (примерно тоже самое что runlevel 3 в init).
Более подробно о возможностях systemd можно прочесть здесь или здесь.

После сохранения файла юнита вы можете использовать созданную службу odchub, например, стартовать (единократно выполнить написанный нами скрипт):

sudo systemctl start odchub

А этой командой вы “включите”, то есть добавите в автозагрузку системы:

sudo systemctl enable odchub

Для удаления созданной таким образом службы, достаточно пары команд:

sudo systemctl disable odchub
sudo rm /etc/systemd/system/odchub.service

После того как создан исполняемый скрипт в соответствующей директории (в нашем случае /etc/init.d/odchub), для включения его при загрузках системы, достаточно выполнить команду:

sudo update-rc.d odchub defaults 90

Числовое значение после слова defaults указывает на приоритет для старта этого скрипта.

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

sudo update-rc.d -f odchub remove

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

14 Comments Leave a comment

Огромное спасибо.
очень пригодилось для автоматического монтирования расшаренного диска в виртуальной манине

Дмитрий says:

Огромное спасибо! долго пытался добавить отключение APM винчестера в автозагрузку, очень помогло! что скрипт надо кинуть в init.d и сделать исполняемым я знал, а вот просто update-rc – нет

Подскажите, а этот скрипт будет стартовать для конкретного пользователя или для всех.
У меня просто стоит NX сервер и мне нужно каждый раз вручную логиница и запускать скрипт для расшара папки.
P.S. Заранее спасибо!

Igor, этот скрипт будет запускаться под пользователем root при инициализации системы. Также, можно написать специальный скрипт, который сможет запускать различные программы под какими-то определенными пользователями. А NX server исправно автозапускается после установки из deb с официального сайта. Вы собирали его из исходного кода?

да. Nx собирался именно так.
Может мне сделать так??
# права на исполнение
sudo chmod +x /etc/init.d/my_script
# симлинк на запуск в автомат.
sudo ln -s /etc/init.d/my_script /etc/rc1.d/S20_my_script # запуск при single user mode
————————————-
Я делал когда то такое для Iptables, что бы он автоматически запускал мои правила.
Но в моём случае, каждое утро я захожу и запускаю этот скрипт вручную что бы дать права на использование пользователям.

Создание своего скрипта автозапуска при загрузке компьютера

Данная строка указывает, какую командную оболочку необходимо использовать. Дальше свои команды.

Сохраним его под оригинальным названием (чтоб не совпадал с уже существующими) в каталоге /usr/sbin/.

Чтобы скрипт запускался при загрузке, необходимо прописать его в файле /etc/rc.local до строчки exit 0. Если у вас не существует данного файла, создайте его и вставьте в него следующее содержимое:

#!/bin/sh -e #Здесь вставляем строку с указанием вашего скрипта. /usr/sbin/mescripts exit 0

Немного более сложный способ

Позволяет задать последовательность загрузки и поведение скрипта при разных runlevel’ах.

Изучаем /etc/init.d/skeleton , на его основе создаем скрипт /etc/init.d/my_script , которым будет запускаться/останавливаться наше приложение.

В этих директориях лежат скрипты остановки сервисов:

/etc/rc0.d/ /etc/rc1.d/ /etc/rc6.d/

в этих — скрипты запуска сервисов:

/etc/rc2.d/ /etc/rc3.d/ /etc/rc4.d/ /etc/rc5.d/

Изучаем их на предмет последовательности (чем меньше первая цифра в начале скрипта, тем раньше запускается/останавливается приложение). Это может быть критично, если ваше приложение будет зависит от каких-то сервисов.

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

sudo update-rc.d my_script start 70 2 3 4 5 . stop 20 0 1 6 .

Здесь я определил, что мой скриптик должен запускаться попозже остальных(70), и останавливаться пораньше(20). Цифры 2 3 4 5 0 1 6 означают уровни загрузки.

Если что-то не понравилось — все можно удалить

sudo update-rc.d -f my_script remove

Подробности в man update-rc.d .

Выполнение скрипта при включении/отключении сети

Есть директория /etc/network/ с поддиректориями if-down.d , if-pre-up.d , if-post-down.d , if-up.d . Если разместить скрипт в одной из этих поддиректорий, то он будет выполняться соответственно при выключении, перед включением, после выключения или при включении сети.

Другой способ — указать в файле /etc/network/interfaces одну из следующих директив: up , pre-up , post-up , down , pre-down , post-down . Например, строка

post-up /path/to/script.sh

после включения сети выполнит скрипт script.sh. Подробнее можно почитать в man interfaces .

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

Добавить скрипт в автозагрузку

В гноме не специалист, поэтому гном-специфичного решения не подскажу. Но есть способ, универсальный для всех DE — воспользоваться спецификацией XDG и положить *desktop-файл, запускающий ваш скрипт или приложение, в директорию /etc/xdg/autostart (это если глобально дял всех) либо в ~/.config/autostart/ (если для конкретного пользователя.

Всегда есть быстрое простое неправильное решение.
быстрые простые правильные (иногда) ответы здесь t.me/ManjaroRu

Спасибо, попробую.
В Мате у меня оно с ГУИ работает, как тут выше и писали, кнопка «Добавить» и тут есть выбор из всего софта и отдельно «кастом скрипт»

Нужно создать файл с расширением .desktop, с содержанием:
[Desktop Entry]
Type=Application
Exec=
Hidden=false
X-GNOME-Autostart-enabled=true
Name[en_US]=
Name=
Comment[en_US]=
Comment=

Выделенное <. >, заполнить согласно твоему случаю. Файл нужно поместить в каталог:
~/.config/autostart
Если такой путь отсутствует, его следует создать.

Последний раз редактировалось 15 сентября 2021, 13:33

Всегда есть быстрое простое неправильное решение.
быстрые простые правильные (иногда) ответы здесь t.me/ManjaroRu

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

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

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

Автозагрузка за счет стандартной утилиты Ubuntu

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

$ sudo gedit /путь_к_скрипту/имя_скрипта.sh

#!/bin/bash

echo «Hello world»

Этот скрипт выведет на экран пользователя сообщения «Hello world». Когда программа готова, ее необходимо сделать исполняемой. Для этого используется следующая команда:

$ sudo chmod ugo+x /путь_к_скрипту/имя_скрипта.sh

Дальше в главном меню системы необходимо запустить утилиту «Автоматически запускаемые приложения».

Автоматически запускаемые приложения

Жмем кнопку «Добавить» и вводом полный путь к файлу скрипта в поле «Команда». Можно нажать кнопку «Обзор», найти, выбрать файл скрипта и нажать «Добавить».

Графическая оболочка Ubuntu

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

Автозагрузка скриптов Linux в Systemd

Воспользуйтесь специальной командой, чтобы создать файл сервиса system

sudo systemctl edit —force myscript

В этот файл необходимо добавить содержимое:

[Unit]

Description=My Script Service

After=multi-user.target

[Service]

Type=idle

ExecStart=/полный/путь/к/скрипту/имя_скрипта.sh

[Install]

WantedBy=multi-user.target

Создание файла сервиса systemd

Дальше в строчке под названием ExecStart нужно выполнить одно из следующих требований: прописать путь у выполняемому скрипту или команду. После чего скрипт добавляется в автозагрузку:

$ sudo systemctl daemon-reload

$ sudo systemctl enable mysrcipt

Программа запустится после инициализации системы. С этой целью можно пользоваться «старым» способом: с помощью rc.local. сощдается файл /etc/rc.local и прописывается путь к нему в строке ExecStart сервис-файла.

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

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