Автозапуск сценария Debian при загрузке

Обновлено: 21.11.2024

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

В TorizonCore приложения упакованы в контейнеры. Контейнеры запускаются подсистемой контейнеров, в нашем случае это Docker.

Docker уже настроен на автозапуск, и для запуска ваших приложений при загрузке в TorizonCore вы должны описать, какие контейнеры использовать и как их вызывать. Пожалуйста, ознакомьтесь с нашими материалами о шагах по автоматическому запуску контейнера с помощью TorizonCore в разделе «Запуск и управление контейнерами Docker в Torizon».

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

Системный

Начиная с версии 2.x нашего Linux BSP мы используем systemd в качестве диспетчера инициализации и служб.

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

Конфигурация модуля – это файл, имя которого заканчивается на .service. В нем содержится информация о процессе, который контролируется и контролируется systemd. Служебные файлы можно найти в /etc/systemd/system/, а для дистрибутива — в /lib/systemd/system/ .

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

Общие элементы конфигурации настраиваются в общих разделах [Unit] и [Install].

Параметры конфигурации конкретной службы настраиваются в разделе [Сервис].

Файлы службы должны включать раздел [Service], который содержит информацию о службе и контролируемом ею процессе.

Для получения дополнительной информации о возможных опциях раздела [Сервис] обратитесь к документации.

Процедура

Создайте файл конфигурации объекта с расширением .service

Скопируйте файл конфигурации модуля в /etc/systemd/system и используйте инструмент systemctl для включения и запуска службы.

Использование команды systemctl

Исходя из документации SystemD, вам необходимо перезагрузить конфигурацию systemd после добавления или изменения любых юнит-файлов:

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

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

Вот пример файла конфигурации устройства для автоматического запуска (гипотетического) приложения mydatalogger при запуске:

Оболочки

/etc/профиль

Каждый раз, когда запускается оболочка входа в систему, выполняется сценарий /etc/profile и все сценарии в /etc/profile.d.

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

/etc/profile загружается при входе в систему: он настраивает среду при входе в систему и настройки приложения, получая любой доступный для чтения файл в /etc/profile.d/ .

Использование /etc/profile хорошо подходит для настройки среды или выполнения небольших задач.

Обратите внимание, что эти сценарии должны вернуть управление, чтобы продолжить вход в систему.

Удалите файл в /etc/profile.d или дополнения к /etc/profile, чтобы отменить автоматическое выполнение.

Процедура

Чтобы загружать сценарий оболочки при каждом входе в систему, вам просто нужно добавить файл сценария в /etc/profile.d/ .

Помните, что сценарий оболочки должен иметь расширение *.sh.

Ниже приведен пример файла сценария для удаления записей резервной копии:

Графический

Настольный компьютер Weston

В более поздней версии Toradex Linux BSP 5 используется графический компоновщик Weston/Wayland вместо X11, который использовался до BSP 3.0.

Обратите внимание, что Wayland — это протокол, а Weston — графический компоновщик, реализующий протокол Wayland. Подробнее об этом можно прочитать на странице Wayland.

Любое графическое приложение, разработанное для X11, также должно работать, поскольку компоновщик Weston настроен на работу с режимом совместимости XWayleand, что позволяет использовать клиенты X11.

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

Пример автоматического запуска графического приложения wayland при загрузке представлен ниже.

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

Уэстон будет использовать XDG_RUNTIME_DIR для контекста окна.

Также рекомендуется соответствующим образом экспортировать переменную DISPLAY. См. ниже:

С сервисом и скриптом ваше приложение Wayland будет автоматически запускаться при загрузке.

Проект Yocto/OpenEmbedded

Мы подготовили сценарии для автоматического запуска вашего приложения в Wayland/Weston при запуске непосредственно из сборки Yocto Project/OpenEmbedded. Это называется wayland-app-launch, а также то, как мы автоматически запускаем демонстрации Qt на эталонном мультимедийном изображении. Ознакомьтесь с приведенными ссылками, которые содержат примеры того, как вы можете интегрировать это в OE.

X11 для рабочего стола

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

С angstrom-lxde-image вы получите следующие возможности. Другие среды рабочего стола предоставляют аналогичные средства.

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

Этого можно добиться двумя способами:

Специфический для lxsession способ, которым анализируются записи в файлах /etc/xdg/lxsession/LXDE/autostart и ~/.config/lxsession/LXDE/autostart.

Общий способ, поддерживаемый многими диспетчерами сеансов. Файлы в папках /etc/xdg/autostart/ и ~/.config/autostart/, оканчивающиеся на .desktop, анализируются и, если применимо, запускается описанное в них приложение.

Дополнительную информацию можно найти в документации по LXSession.

Файл автозапуска LXSession

Чтобы использовать первый вариант, вам нужно отредактировать файл /etc/xdg/lxsession/LXDE/autostart или ~/.config/lxsession/LXDE/autostart.

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

Если вы хотите, чтобы ваше приложение перезапускалось в случае аварийного завершения работы, поставьте перед именем приложения символ @. Как, например, lxterminal с @lxterminal в /etc/xdg/lxsession/LXDE/autostart:

Обратите внимание, что этот файл не является сценарием оболочки, поэтому такие акробатические трюки оболочки, как перенаправления и конвейеры, не допускаются.

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

Файлы .desktop

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

Дополнительную информацию об этом можно найти в документации к файлу .desktop. Примечание. В /usr/share/applications/ уже есть несколько файлов .desktop, которые можно скопировать в папку автозапуска.

Например, если вы хотите автоматически запускать lxterminal при запуске, вы можете сделать следующее: 1. Создайте terminal.desktop в /etc/xdg/autostart/ . Добавьте несколько ключевых записей, таких как:

  • [Desktop Entry] — должна быть первой строкой каждого файла рабочего стола и заголовком раздела для идентификации блока пар ключ-значение, связанного с рабочим столом. Необходимо, чтобы рабочий стол правильно распознал файл.
  • Имя приложения. (Имя группы Desktop Entry — должно быть уникальным в системе)
  • Тип приложения. (Возможные значения: «Приложение», «Ссылка» или «Каталог».)
  • Имя исполняемого файла приложения плюс необязательные аргументы.
  • Терминал (описывает, должно ли приложение работать в терминале.)

Пример содержимого файла .desktop с записями должен быть следующим:

  1. После редактирования сохраните рабочий стол.

Примечание. Графический файловый менеджер будет отображать файлы .desktop не с их именами, а со значением ключа «Имя». например в приведенном выше примере "LXTerminal".

Чтобы отключить автоматический запуск приложения, просто удалите соответствующий файл *.desktop из /etc/xdg/autostart/ и/или .config/autostart/ или добавьте ключ NotShowIn=LXDE; в файл рабочего стола.

В качестве альтернативы используйте графический интерфейс «Меню LXDE»/Настройки/«Настройки сеанса рабочего стола» и снимите флажок «Включено».

X11 с одним пользовательским приложением

Если ваш вариант использования требует запуска X11, вероятно, также потребуется запустить некоторые задачи настройки, такие как сопоставление клавиатуры, калибровка сенсорного экрана, а затем запустить единственное пользовательское приложение. В этом случае вы можете использовать схему, подобную той, что используется в angstrom-qt5-x11-image и qt4e-demo-image.

Скрипт, запущенный Systemd

В qt4e-demo-image и angstrom-qt5-x11-image (до версии 2.8b2) используется служба systemd и сценарий домашнего приготовления. Сценарий запускает X-сервер, а затем пользовательское приложение. Интеграция любых задач установки между запуском X11 и запуском пользовательского приложения в сценарий приводит к множеству проблем, поскольку иногда это останавливает X-сервер и т. д.

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

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

Использование nodm, xinit и пользовательского скрипта

В образе angstrom-qt5-x11 (начиная с версии 2.8b2) для запуска X11 используется простой менеджер отображения nodm из OpenEmbedded.При этом используются данные конфигурации в /etc/X11 , например. Xsession.d, например. для запуска сенсорного калибратора. В качестве последнего шага он ищет скрипт x-window-manager и получает его.

Чтобы запустить приложение X11, переопределите следующие две переменные в рецепте x-window-simple-app, чтобы установить начальный рабочий каталог и указать приложение:

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

Поместите команду в файл crontab. Файл crontab в Linux — это демон, который выполняет редактируемые пользователем задачи в определенное время и при определенных событиях. Чтобы отредактировать файл, откройте терминал и введите «sudo crontab -e», чтобы открыть файл crontab в текстовом редакторе по умолчанию. В первой доступной строке введите «@reboot xxxx», где «xxxx» — это команда, которую вы хотите запустить. Сохраните файл и выйдите.

Поместите сценарий, содержащий команду, в каталог /etc. Создайте сценарий, такой как «startup.sh», используя ваш любимый текстовый редактор. Сохраните файл в каталоге /etc/init.d/. Измените разрешения сценария (чтобы сделать его исполняемым), набрав «chmod +x /etc/init.d/mystartup.sh».

Отредактируйте сценарий /rc.local с помощью текстового редактора. В системах Fedora этот скрипт находится в /etc/rc.d/rc.local, а в Ubuntu — в /etc/rc.local. После того, как вы добавите команды, которые хотите запустить (убедитесь, что вы делаете это от имени пользователя root), сохраните файл и выйдите. Команды будут запущены после следующего запуска.

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

Существует несколько этапов запуска 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:

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

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

Меня всегда завораживает то, что происходит за кулисами, когда я загружаю систему Linux и вхожу в нее. Нажав кнопку питания на «голом железе» или запустив виртуальную машину, вы запускаете серию событий, которые приводят к созданию полностью функциональной системы — иногда менее чем за минуту. То же самое верно и при выходе из системы и/или завершении работы системы.

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

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

Примечание. Мы предполагаем использование Bash в качестве основной оболочки для событий входа и выхода. Если вы используете другой, некоторые из этих методов могут работать, а могут и не работать. Если вы сомневаетесь, обратитесь к документации вашей оболочки.

Выполнение сценариев Linux во время перезагрузки или запуска

Существует два традиционных метода выполнения команды или запуска сценариев во время запуска:

Помимо обычного формата (минута/час/день месяца/месяц/день недели), который широко используется для указания расписания, планировщик cron также позволяет использовать @reboot . Эта директива, за которой следует абсолютный путь к сценарию, заставит его запускаться при загрузке машины.

Однако при таком подходе есть две оговорки:

  1. a) должен быть запущен демон cron (что происходит при нормальных обстоятельствах) и
  2. b) сценарий или файл crontab должен включать переменные среды (если они есть), которые потребуются (дополнительные сведения см. в этой ветке StackOverflow).

Этот метод действителен даже для дистрибутивов на основе systemd. Чтобы этот метод работал, вы должны предоставить разрешения на выполнение для /etc/rc.d/rc.local следующим образом:

и добавьте свой сценарий внизу файла.

На следующем изображении показано, как запустить два примера сценариев ( /home/gacanepa/script1.sh и /home/gacanepa/script2.sh ) с использованием задания cron и rc.local соответственно, и их соответствующие результаты.

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

Выполнение сценариев Linux при входе в систему и выходе из нее

Чтобы выполнить сценарий при входе в систему или выходе из нее, используйте ~.bash_profile и ~.bash_logout соответственно. Скорее всего, вам нужно будет создать последний файл вручную. Просто поместите строку, вызывающую ваш скрипт, внизу каждого файла так же, как и раньше, и вы готовы к работе.

Обзор

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

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

Если вы цените то, что мы делаем здесь, в TecMint, вам следует подумать о следующем:

TecMint – это самый быстрорастущий и пользующийся наибольшим доверием сайт сообщества, где можно найти любые статьи, руководства и книги по Linux в Интернете. Миллионы людей посещают TecMint! для поиска или просмотра тысяч опубликованных статей, доступных всем БЕСПЛАТНО.

Если вам нравится то, что вы читаете, купите нам кофе (или 2) в знак признательности.

Мы благодарны за вашу бесконечную поддержку.

Похожие записи

12 мыслей на тему «Как автоматически выполнять команды/скрипты во время перезагрузки или запуска»

Я хочу запускать эту команду под обычным пользователем, а не как root каждый раз, когда мой VPS перезагружается, это дешевый VPS, на котором все еще работает Centos 5

похоже, что это руководство выполняется как root

Это сработало именно так, как мне было нужно. rc.local был тем, что мне было нужно для создания раздела «золотого диска» для различного оборудования.

В Linux Mint нет папки rc.d, но есть rc0.d, rc1.d до rc6.d/etc/rc.local не выполняется в Linux Mint, но существует.

Существует файл /etc/init.d/rc.local, который предположительно выполняет /etc/rc.local, но не выполняет его.

/etc/profile можно сделать исполняемым, и здесь можно выполнить общесистемные настройки.

Более того, я написал сценарий запуска, поместил его в свой локальный каталог bin и добавил его в программы запуска Mint Mate.

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

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

rc.local устарел, используйте вместо него systemd

Кажется, я припоминаю, что можно запускать скрипт как побочный эффект команды «shutdown».

Какой шрифт использован на снимке экрана?
Спасибо

Что делать, если у меня нет папки rc.d, а есть только папки с rc0.d по rc6.d.

Если вы используете Centos или rhel 7, вам необходимо дополнительно активировать одну службу.

PERjham, это сработало как по маслу. Спасибо за это

Спасибо, что указали на это!

Есть что сказать? Присоединяйтесь к обсуждению. Отменить ответ

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

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