Linux как добавить программу в автозагрузку. Настройка автозапуска в Ubuntu

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

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

systemctl enable имя_сервиса.service
update.rc имя_сервиса defaults
chkconfig --add имя_обслуживания

Добавление программ в автозапуск в Linux

В данном примере описывается как добавить в автозагрузку nginx? По аналогичностьи добавляем и другие программы! Для начало нужно задать права на исполнение файла:

chmod +x /etc/init.d/nginx

После записываем в автозагрузку:

/usr/sbin/update-rc.d -f nginx defaults

Добавление программ в автозагрузку в Linux

Творим файл в /etc/init.d/

sudo nano /etc/init.d/

В начало скрипта нужно добавить:

Ставим права на исполнение /etc/init.d/local:

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

Добавляем script /etc/init.d/local в автозапуск:

sudo update-rc.d local defaults 80

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

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

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

Как работает автозагрузка?

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

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

Рассмотрим основные уровни автозагрузки которые вы можете использовать:

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

Автозагрузка на уровне ядра

Автозагрузка на уровне ядра вряд ли будет вам очень полезной для повседневного применения, но я решил о ней упомянуть, поскольку такая возможность есть. С помощью параметра ядра init вы можете указать какую программу стоит запускать сразу после завершения инициализации ядра. Например, вы можете загрузить оболочку Bash вместо Systemd. Для этого достаточно подправить строку запуска ядра в конфигурационном файле Grub или во время запуска. Добавьте в конец параметр init:

$ sudo vi /boot/grub2/grub.cfg

linux /vmlinuz-4.8.0-22-generic root=/dev/mapper/systems-ubuntu ro quiet init=/bin/bash

Но, обычно, удобнее изменить это значение временно, в меню Grub. Читайте подробнее об этом в статье параметры ядра Linux . Так не выполняется автозагрузка программы linux, но, тем не менее, иногда может быть полезно.

Автозагрузка в системе инициализации

Чаще всего, когда говорится автозагрузка Linux, подразумевается именно автозагрузка сервисов с помощью системы инициализации. В systemd очень продвинутая система управления службами . Здесь поддерживается разрешение зависимостей, параллельный запуск, отсрочка запуска и перезапуск при ошибке. В терминологии Systemd все запускаемые программы представлены файлами юнитов, в каждом юните описаны параметры программы, ее исполняемый файл, а также дополнительные требования к запуску.

Для добавления или удаления служб из автозапуска используется команда systemctl. Чтобы добавить службу в автозапуск выполните:

$ sudo systemctl enable имя_службы

А чтобы отключить ее автозапуск linux:

$ sudo systemctl disable имя_службы

Например, если вы хотите добавить в автозагрузку Apache, то нужно выполнить:

$ sudo systemctl enable apache

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

$ sudo systemctl is-enabled httpd

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

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

$ systemctl list-unit-files | grep enabled

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

Раньше было принято размещать все скрипты, которые запускаются по умолчанию в файле /etc/rc.local. Этот файл все еще существует, но это пережиток системы инициализации SysVinit и теперь он сохраняется только для совместимости. Скрипты же нужно загружать только с помощью Systemd.

Для этого достаточно создать простой юнит-файл и добавить его в автозагрузку, как любой другой сервис. Сначала создадим этот файл:

$ sudo vi /lib/systemd/system/runscript.service


Description=My Script Service
After=multi-user.target


Type=idle
ExecStart=/usr/bin/local/script.sh


WantedBy=multi-user.target

В секции Unit мы даем краткое описание нашему файлу и говорим с помощью опции After , что нужно запускать этот скрипт в многопользовательском режиме (multi-user). Секция Service самая важная, здесь мы указываем тип сервиса - idle , это значит, что нужно просто запустить и забыть, вести наблюдение нет необходимости, а затем в параметре ExecStart указываем полный путь к нашему скрипту.

Осталось выставить правильные права:

$ sudo chmod 644 /lib/systemd/system/runscript.service

Затем обновить конфигурацию и добавить в автозагрузку Linux новый скрипт:

$ sudo systemctl daemon-reload
$ sudo systemctl enable myscript.service

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

$ sudo chmod u+x /usr/local/bin/script

В параметрах мы передаем утилите адрес файла скрипта. Исполняемость - это обязательный параметр для всех способов.

Автозагрузка X сервера

Часто, в легких окружениях рабочего стола и оконных менеджеров для автозагрузки программ используется автозагрузка на уровне X сервера. Все запускаемые, таким образом, скрипты будут стартовать после запуска X сервера. Чтобы настроить такую автозагрузку Linux вам будет достаточно добавить путь к нужному скрипту в файл ~/.xinitrc или /etc/X11/xinit/xinitrc. Синтаксис добавляемой строки таков:

exec путь_к_скрипту &

Если файла ~/.xinitrc еще не существует, то его нужно создать:

$ cp /etc/X11/xinit/xinitrc ~/.xinitrc

Затем, чтобы добавить в автозагрузку linux скрипт, отредактируйте файл так, как вам нужно. Например, будем запускать Firefox:

exec /usr/bin/firefox &

Автозагрузка окружения рабочего стола

Такие мощные окружения рабочего стола как Gnome и KDE имеют свои приложения для автозагрузки. Например, в Gnome программа называется "Запускаемые автоматически приложения" . Вы можете запустить ее из главного меню системы:

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

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

Тут вам нужно заполнить три поля:

  • Имя - произвольное имя для команды, по которому вы сможете ее найти;
  • Команда - полный путь к исполняемому файлу программы;

Выпуск WordPress 5.3 улучшает и расширяет представленный в WordPress 5.0 редактор блоков новым блоком, более интуитивным взаимодействием и улучшенной доступностью. Новые функции в редакторе […]

После девяти месяцев разработки доступен мультимедиа-пакет FFmpeg 4.2, включающий набор приложений и коллекцию библиотек для операций над различными мультимедиа-форматами (запись, преобразование и […]

  • Новые функции в Linux Mint 19.2 Cinnamon

    Linux Mint 19.2 является выпуском с долгосрочной поддержкой, который будет поддерживаться до 2023 года. Он поставляется с обновленным программным обеспечением и содержит доработки и множество новых […]

  • Вышел дистрибутив Linux Mint 19.2

    Представлен релиз дистрибутива Linux Mint 19.2, второго обновления ветки Linux Mint 19.x, формируемой на пакетной базе Ubuntu 18.04 LTS и поддерживаемой до 2023 года. Дистрибутив полностью совместим […]

  • Доступны новые сервисные релизы BIND, которые содержат исправления ошибок и улучшения функций. Новые выпуски могут быть скачано со страницы загрузок на сайте разработчика: […]

    Exim — агент передачи сообщений (MTA), разработанный в Кембриджском университете для использования в системах Unix, подключенных к Интернету. Он находится в свободном доступе в соответствии с […]

    После почти двух лет разработки представлен релиз ZFS on Linux 0.8.0, реализации файловой системы ZFS, оформленной в виде модуля для ядра Linux. Работа модуля проверена с ядрами Linux c 2.6.32 по […]

  • В WordPress 5.1.1 устранена уязвимость, позволяющая получить контроль над сайтом
  • Комитет IETF (Internet Engineering Task Force), занимающийся развитием протоколов и архитектуры интернета, завершил формирование RFC для протокола ACME (Automatic Certificate Management Environment) […]

    Некоммерческий удостоверяющий центр Let’s Encrypt, контролируемый сообществом и предоставляющий сертификаты безвозмездно всем желающим, подвёл итоги прошедшего года и рассказал о планах на 2019 год. […]

  • Вышла новая версия Libreoffice — Libreoffice 6.2
  • В Убунту есть 2 основных уровня автозапуска - в системе инициализации systemd и в рабочем окружении. Для пользовательского софта автозагрузка в Ubuntu может быть настроена в удобной графической утилите. Добавить в автозапуск можно программу или собственный скрипт.

    Автозагрузка в Ubuntu

    Актуальная Ubuntu 18.04 по умолчанию в качестве рабочего окружения использует GnomeShell. Для настройки автозапуска в этой версии ОС нужно:

    Совет! Чтобы не ошибиться с правильностью команды, нужно установить утилиту «Главное меню» из UbuntuSoftwareCenter.

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

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

    gnome-session-properties.

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

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

    1. Сделать скрипт исполняемым с помощью команды:

      sudochmodugo+x /home/user/script.sh

      (где user - имя пользователя, а script - название скрипта, но путь до вашего файла.sh может отличаться: его нужно прописать полностью, иначе скрипт не запустится).

    2. Открыть «Автоматически запускаемые приложения» и нажать «Добавить».
    3. Ввести имя скрипта, а в качестве команды - полное название с путем до файла, например, /home/user/script.sh .
    4. Кликнуть по «Добавить».

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


    Этот способ подойдет и для автозагрузки на UbuntuServer, где нет графики.

    Отсрочка автозапуска программ в Ubuntu

    Если программ в автозагрузке Убунту очень много, их необходимо подгружать в определенном порядке или запускать спустя какое-то время после загрузки системы - поможет функция отсрочки. Для ее активации используется unix-утилита sleep. Воспользоваться возможностями этого инструмента можно в уже знакомой программе «Автоматически запускаемые приложения». Для этого нужно:

    1. Открыть окно параметров запускаемых приложений.
    2. Выделить курсором программу, автозапуск которой необходимо отсрочить, и воспользоваться кнопкой «Изменить».
    3. В строке «Команда» перед имеющеюся записью внести:

    где цифра после слова «спать» равна количеству секунд, которое приложение бездействует сразу после старта системы, перед тем как запуститься. Между данной формулой, в конце которой обязательна точка с запятой, и командой на запуск приложения, должен быть пробел.

    В приведенном примере отложенной автозагрузки программ в Ubuntu приложение остается в состоянии «сна» 2 минуты, прежде чем открыться. Например, запуск через полчаса после старта ОС будет выглядеть как sleep 3h «имя программы». Пример, в котором Transmission запускается через 1 час:

    sleep 1h; transmission-gtk %U

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

    Удаление из автозапуска Ubuntu

    Чтобы убрать софт из автозагрузки Ubuntu, можно воспользоваться одним из 2 способов: через «Автоматически запускаемые приложения» или вручную. В первом случае достаточно запустить утилиту, выделить нужную программу и нажать «Удалить». Простое снятие галочки отключается программа, и она не будет запускаться при старте системы.

    Ручной способ подразумевает использование папки autostart в Ubuntu. Она расположена по адресу /home/имя пользователя/.config/autostart/ (чтобы увидеть эту скрытую папку, следует открыть домашний каталог в файловом менеджере и нажать одновременно клавиши Ctrl+H). В ней лежат файлы с расширением.desktop для каждой программы из автозапуска, формирующиеся автоматически при добавлении через графическую утилиту. Достаточно удалить файл, чтобы программа больше не открывалась при включении компьютера.

    Заключение

    Автозагрузка в Ubuntu имеет множество способов тонкой настройки. Ее возможности трудно охватить. Грамотное использование этого инструмента делает ОС Linux практичнее в повседневных задачах.

    Целью данной статьи является ознакомление с принципами автозагрузки в операционной системе Ubuntu на примере Ubuntu Server 10.04 LTS, а также демонстрация настройки автозагрузки виртуальной машины, работающей под управлением VirtualBox, и корректное завершение работы последней в автоматическом режиме при выключении Ubuntu Server.

    Внимание! Описанный ниже пример не может быть применим к настройке автозагрузки графических приложений для конкретного пользователя системы в настольных версиях Ubuntu. Для этого используйте пункт «Запускаемые приложения» из главного меню Ubuntu.


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

    Организация автозагрузки в Ubuntu Server.
    Разумеется, для того, чтобы правильно запустить/остановить сервис, необходимо описать сценарий с командами для запуска/остановки. Взгляните на содержимое каталога /etc/init.d: он содержит скрипты, которые управляют загрузками/остановками сервисов на вашей машине. Итак, первый, но не последний пункт успешной настройки - это наличие скрипта в /etc/init.d. В скрипте не описывается, когда должен выполняться тот или иной сценарий. Он лишь может принимать параметры start, stop, restart и так далее. Откуда же Ubuntu знает, когда необходимо вызвать скрипт? Ответ кроется в каталогах /etc/rcN.d, где N – это цифра от 0 до 6. В этих каталогах хранятся символические ссылки на скрипты из /etc/init.d. Рассмотрим, что означает каждый каталог, и всё сразу станет понятно:
    - rc0.d – выполнение скрипта при выключении системы;
    - rc1.d – выполнение скрипта при запуске системы в однопользовательском режиме;
    - rc2.d – выполнение скрипта при запуске системы в многопользовательском режиме;
    - rc3.d – rc5.d – зарезервировано;
    - rc6.d – выполнение скрипта при перезагрузке системы.

    Например, если происходит перезагрузка, то будут выполнены все скрипты из каталога /etc/rc6.d, при выключении - из /etc/rc0.d и так далее. Цифра в названии каталога называется уровнем запуска. То есть каталог /etc/rc0.d будет называться нулевым уровнем запуска и так далее.
    Есть еще один немаловажный момент, который необходимо знать - это очередность выполнения скриптов из каталогов rcN.d. Ведь для правильной организации запуска/остановки работы Ubuntu может потребоваться запускать/останавливать сервисы в определенном порядке. Этот момент решается специальным именованием файлов в каталогах уровней запуска. Файлы имеют следующие имена: NN[имя], где - это один символ («S» означает, что скрипт запускает сервис, «K» – останавливает), NN – порядковый номер, [имя] – имя файла. Символ «S» или «K» самостоятельно выбирать не придется, так как все скрипты в каталогах rc1.d-rc5.d должны начинаться с символа «S», а в каталогах rc0.d и rc6.d – с символа «K». Число «NN» определяет очередность запуска скриптов, который производится от меньшего к большему. Чем меньше число у скрипта для запуска, тем раньше он будет запущен при старте системы; чем больше число у скрипта остановки сервиса, тем позже он будет выполнен.

    При необходимости запуска какой-либо службы или приложения до или после конкретного существующего сервиса просто подсмотрите его порядковый номер в соответствующей директории rcN.d и учитывайте при выборе порядкового номера для своего скрипта.

    Ну что ж, где хранить скрипты и как их называть понятно, а вот как его написать?
    В каталоге /etc/init.d находится пример скрипта для управления запуском/остановкой сервисов. Это файл /etc/init.d/skeleton, а в примере ниже он будет упрощен. Для создания нового скрипта необходимо сделать копию примера и отредактировать его под свои нужды. Воспользуемся следующей командой:
    sudo cp /etc/init.d/skeleton /etc/init.d/myscript && vi /etc/init.d/myscript

    При создании нового скрипта не забывайте давать ему права на выполнение. Чтобы добавить права на выполнение скрипту, используйте команду sudo chmod +x /etc/init.d/myscript

    Скрипт готов. Что дальше?
    В некоторых источниках встречаются рекомендации по созданию символических ссылок вручную при помощи команды ln, не смотря на существование специальных утилит. Перед добавлением скрипта утилита проверяет его на валидность, а команда ln создаст ссылку даже при наличие ошибок. Лучше отдать предпочтение специализированным утилитам, таким как update-rc.d, которая поставляется в комплекте с Ubuntu. С её помощью можно добавить новый скрипт в любой уровень загрузки, удалить существующий и так далее. Вот пример использования:
    sudo update-rc.d myscript start 99 2 3 4 5 . stop 01 0 1 6 .

    Эта команда добавит новый скрипт «myscript» во все уровни загрузки. Будет выполнен запуск сервиса на уровнях со 2 по 5 с приоритетом 99 (в последнюю очередь) и остановка сервиса на 0, 1 и 6 уровнях с приоритетом 01 (самым первым).
    Чтобы удалить скрипт из автозагрузки, воспользуйтесь командой:
    sudo update-rc.d -f myscript remove

    Рассмотрим пример настройки автозагрузки.
    Задача: настроить автоматический запуск виртуальной машины, работающей под управлением VirtualBox, которая должна запускаться спустя две минуты после запуска операционной системы Ubuntu Server. При выключении или перезагрузке Ubuntu Server виртуальная машина должна корректно завершать свою работу.
    Предположим, что на Ubuntu Server установлен VirtualBox и существует виртуальная машина с именем «Slave», операционная система которой поддерживает возможность корректного завершения работы при нажатии кнопки выключения компьютера (поддержка ACPI).

    Для начала напишем скрипт, который будет располагаться в каталоге /etc/init.d:
    sudo cp /etc/init.d/skeleton /etc/init.d/slave && sudo vi /etc/init.d/slave

    Отредактировав скрипт и оставив лишь минимально необходимое, получаем файл со следующим содержимым:
    #!/bin/sh ### BEGIN INIT INFO # Provides: slave # Required-Start: # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: ability for starting and saving execution state of VBox virtual machines # Description: This script is used for starting and saving execution state of VBox virtual machines by using System-V on Ubuntu Server. This file should be placed in /etc/init.d ### END INIT INFO # Author: Fuks Alexander . /lib/lsb/init-functions # Perform start of Slave"s virtual machine with delay 2 minutes perform_start() { log_daemon_msg «Starting Vbox Slave machine» sleep 120 && su -l -c «VboxHeadless –startvm Slave &» kungfux log_end_msg 0 return 0 } # Send POWEROFF ACPI signal for Slave"s virtual machine perform_save() { log_daemon_msg «Sending ACPI POWER OFF signal for Vbox Slave machine» su -l -c «VboxManage controlvm Slave acpipowerbutton» kungfux log_end_msg 0 return 0 } case “$1” in start) perform_start ;; stop) perform_save ;; *) echo “Usage: /etc/init.d/slave {start|stop}” exit 3 ;; esac:

    Добавим скрипт во все уровни запуска:

    Kungfux@itworks:~$ sudo update-rc.d slave start 99 2 3 4 5 . stop 01 0 1 6 . Adding system startup for /etc/init.d/slave ... /etc/rc0.d/K01slave -> ../init.d/slave /etc/rc1.d/K01slave -> ../init.d/slave /etc/rc6.d/K01slave -> ../init.d/slave /etc/rc2.d/S99slave -> ../init.d/slave /etc/rc3.d/S99slave -> ../init.d/slave /etc/rc4.d/S99slave -> ../init.d/slave /etc/rc5.d/S99slave -> ../init.d/slave

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

    Kungfux@itworks:~$ cat /var/log/boot.log fsck from util-linux-ng 2.17.2 /dev/sda1: clean, 92526/4751360 files, 2565789/18975488 blocks * Starting Jenkins Continuous Integration Server jenkins * Starting No-IP.com dynamic address update noip2 * Not starting internet superserver: no services enabled * Starting Postfix Mail Transport Agent postfix * Starting bittorrent daemon transmission-daemon * Starting VirtualBox kernel modules * Starting NTP server ntpd * Starting ftp server proftpd * Starting web server apache2 * Starting Vbox Slave machine

    В последней строке присутствует текст, который был выведен скриптом «slave».
    Более того, написанными скриптами для init.d можно пользоваться из терминала в любой момент времени. Например, для запуска виртуальной машины выполним команду:
    kungfux@itworks:~$ /etc/init.d/slave start

    Как видно из примера, операционная система Ubuntu предоставляет богатые возможности для управления запуском/остановкой сервисов/программ. В скриптах автозагрузки можно описывать зависимости запускаемых/останавливаемых служб от других служб с помощью секций «Required-Start/Required-Stop», да и сам скрипт может быть любой сложности, что позволяет организовать даже самую «тонкую» автозагрузку.

    Данный материал написан для «Первого конкурса русскоязычных статей для ОС Ubuntu 2011 года» (konkurs.ubuntu.ru).

    Похожие публикации