Запуск скрипта при загрузке linux debian

Власть над демонами или автозапуск в Linux

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

Стоит сразу заметить — чтобы программа была полноценным сервисом/демоном, она должна быть соответствующе написана (link1, link2). Впрочем такое делают не всегда, хотя возможно это и не совсем правильно.

Существуют несколько способов сделать автозапуск программ в Linux:

  • записать вызов программы/скрипта запуска в /etc/rc.local в фоновом режиме (&) (в разных дистрибутивах может лежать в разных местах, например, /etc/rc.d/rc.local) с перенаправленными потоками ввода/вывода в /dev/null. Например, «/home/user/my_prog 1 > /dev/null 2 > /dev/null &». Также, дополнительно, можно воспользоваться командой nohup;
  • внести вызов в /etc/inittab, согласно правилам его оформления. В отличие от первого способа тут можно указать уровень запуска для программы;
  • написать скрипт, позволяющий запускать/останавливать/перезапускать программу как демона, а также получать информацию о её состоянии.

Первый способ самый лёгкий, но и самый проблемный. Файл rc.local есть не во всех дистрибутивах. В нём нельзя задать уровень запуска. Если там записано несколько программ, то сложно ими управлять как сервисами (разве что запустить или остановить все одновременно). И, под конец, запуск из него подрывает устойчивость системы от взлома (примеры можно легко найти в поисковике).

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

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

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

Сразу обмолвлюсь, что у меня стоит Debian 6 и в других дистрибутивах пути могут несколько различаться.

Автозапуск программы как демона

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

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

README и skeleton

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

В 6-ом debian`е для запускных скриптов демонов используется LSB (Linux Script Base) Init Standart. Почитать о нём подробнее можно тут. Для систем, где LSB не используется стоит взглянуть сюда.

Рассмотрим поближе файл skeleton. Первое с чего он должен начинаться, конечно же «#!/bin/sh», т.к. init-скрипт — запускной файл. Далее идёт комментированный заголовок:

Может показаться, что это просто лишняя информация от автора, но это не так. То, что указано здесь используется при прописывании скрипта в систему. Тут как раз пригодится файл README, который показывает, что в заголовке skeleton перечислены не все возможные параметры. Как минимум есть ещё следующие:

Все параметры и их полное описание (на английском) можно увидеть тут, а на русском тут и тут (спасибо awzrno за новые ссылки ^_^). К русскому варианту добавлю, что в Required-Start: можно прописать $all, тогда текущий скрипт будет запускаться после всех остальных (иногда это бывает нужно). Также X-Interactive: true показывает, что этот скрипт может взаимодействовать с пользователем, запросом на ввод чего-нибудь, например пароля.

Далее в skeleton идёт инициализация переменных, используемых в самом скрипте. Часть из них нужно будет настроить под свои нужды. Потом проверки на то, что сам демон существует и попытка прочитать конфигурационный файл (их имена должны быть указаны в переменных выше), далее загрузка переменных rcS, а потом идёт одна из самых интересных частей init-файла:
. /lib/lsb/init-functions
это определение LSB функций работы с логами, LSB-статусом сервиса, работы с процессом. В некоторых дистрибутивах этот файл может находиться в каталоге /etc/init.d. Названия и часть подробностей можно узнать непосредственно из комментариев к функциям в этом файле, а также тут.

Читайте также:  Доступ linux разделам windows

Следующая часть — непосредственно тело скрипта. Тело состоит из условных частей, которые являются командами для демона: start, stop, restart/reload/force-reload, status. Кто-то выделяет их в отдельные функции, кто-то нет. На мой взгляд, функциями они выглядят эстетичнее и код более понятен. Все эти команды объединяет оператор выбора case, который и выбирает для исполнения нужный кусок кода, в зависимости от команды (параметра) с которой был запущен init-скрипт.

Таким образом для создания обычного скрипта достаточно подставить в переменные в начале файла нужные значения и, возможно, немного добавить кода в функции start/stop (например загрузку/выгрузку драйвера).

После того как файл будет готов его нужно скопировать в /etc/init.d и добавить в автозагрузку:
update-rc.d defaults
(или insserv для debian 6 stable и выше)
Удалить из автозагрузки можно так:
update-rc.d -f remove
(или insserv -r для debian 6 stable и выше)

Далее также можно использовать команды sysv-rc-conf в debian или service в fedora core, чтобы включить/выключить автозагрузку сервиса.

Автозапуск графического ПО без ввода паролей

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

Убрать запрос пароля на вход можно в центре управления (kcontrol) -> системное администрирование -> менеджер входа в систему -> удобства. Там выбрать пользователя, под которым входить (кроме рута) и поставить нужные галочки (разрешить автовход и вход без ввода пароля).

Чтобы сделать автозапуск программы нужно в каталог /home/ /.kde/Autostart добавить ссылку на запускной файл/скрипт нужного ПО.

Тут убрать запрос пароля на вход можно также в центре управления (gnome-control-center) -> Login Screen. Там, под рутом (ткнуть на замок, ввести пароль) выбрать пользователя, под которым входить (кроме суперпользователя).

Для автозапуска программы опять же в центре управления выбрать Startup Applications -> Add и заполнить маленькую форму.

Для обоих графических менеджеров:
Если нужно запустить под обычным пользователем, но от рута, то ещё надо настроить правила в /etc/sudoers на запуск конкретной программы/набора программ от имени суперпользователя (манами рекомендуется для безопасности делать это с помощью visudo). Как это делать рассказывать не буду, т.к. в man sudoers всё хорошо расписано.

Источник

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

Всем привет! Ребята, возникли кое какие сложности( есть у меня открытый терминальный клиент на дебиане, и есть скрипт rdesktop.sh для подключения к серверу. Задача такова, нужно что бы этот скрипт запускался автоматом, после каждой перезагрузки клиента. Подскажите пожалуйста, куда мне этот скрипт запихнуть надо? Или где его прописать? Потому что, что бы я ни делала, у меня грузится все время графа линукса((( Я пыталась через rc.local настроить-не работает, засунуть скрипт в init.d-т тоже не сработало, эксперементировала с bashrc-эффект конечно был, но не тот что нужно( HELP ME.

ЯННП, какая-то каша. Какой Debian то? Woody или Sarge? Скрипт тайна великая?

перезагрузки клиента
rc.local настроить-не работает

Работает, только для sysVinit. C systemd ,после небольшого шаманства, тоже будет.

Это SysV. Походу точно Debian Sarge.

Это после логина.

Прочитайте про runlevels/targets.

Бездумная копипаста устаревших команд из гугла не поможет, учите матчасть.

Что в этом скрипте?

Если там запускается rdp клиент, т.е. подключение к RDP серверу, то это графическая программа и как следствие она должна запускаться в x-сессии.

скрипт конечно не тайна. просто к нему у меня вопросов нет, я знаю, что он рабочий. И да, в нем прописано подключение к RDP. Весь вопрос и состоит в том, как заставить его запускаться в этой x-сессии.

Напишите, какая версия Debian у вас.

Весь вопрос и состоит в том, как заставить его запускаться в этой x-сессии.

Если вы хотите запускать некоторое графическое окружение (DE), например XFCE4, KDE, GNOME или другое, то добавьте запуск вашего скрипта в автозапуск этого графического окружения.

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

Читайте также:  Максимальный объем оперативной памяти для windows 10 pro

Cubian(release 7.6) И то что вы мне сейчас написали про DE и прочие штуки и настройки, мне не особо ясны. Чтоб вы понимали, мой уровень познаний в линуксе примерно (первый раз, в первый класс. Т.е. почти нулевой), я не так давно начала с ним работать.

Cubian(release 7.6) И то что вы мне сейчас написали про DE

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

при старте системы

просто при логине

при логине в графике

Так вот, если надо именно при логине в графике, то это прописать проще всего в графическойц оболочке, которая у вас стоит, а они бывают разными: XFCE4, KDE, GNOME, MATE etc

Если помешать скрипт через гуи, то у всех разхгные меню. Но можно просто засунуть в виде АППА в /home/ВАШ_USERNAME/.config/autostart/startapp1.desktop

startapp1.desktop должен быть в виде

Что вам не ясно в понятии «графическое окружение»? Что бы вам было понятно, делаем аналогию с Windows, в Windows есть «Пуск» -> «Все программы» -> «Автозагрузка», туда можно помещать программы, ярлыки, скрипты, которые должны выполняться после ввода имени и пароля.

В Linux тоже в любой графической оболочке, DE ( Desktop Environment) есть аналогичная Windows настройка автозапуска.

Вот в неё и добавьте свой скрипт.

Если у вас голая консоль, то установите X-сервер и какое-нибудь лёгкое DE, например Xfce4 или lxde.

И найдите в его настройках автозагрузку, туда добавьте ваш скрипт.

Это наиболее простой способ.

К тому же, если вам непонятны какие-либо описанные понятия, то всегда есть гугл. Где можно узнать что означает то, либо иное понятие. К тому же я старался писать терминами, которые применяются во всех системах, Windows, Linux, MacOS.

Вот вам запросы в google:
«графическое окружение (DE)»
«Linux xfce4 автозапуск приложений»
«Linux gnome автозапуск приложений»
«Linux DM автологин»

Не дебиан, дериватив. На оф сайте пишут что DE — Mate, гугл подсказывает что автозапуск в Mate находится: «Control Centre > Personal > Startup Applications».

Как я понимаю проблема решена.
Но всё же опишу.
система->параметры->персональные ->запускаемые приложения. Затем «добавить», в поле «команда» нажимаем «обзор» и находим наш скрипт)
Для проверки достаточно «завершить сеанс» и снова залогиниться.

интересно что за зверь

Чтоб вы понимали, мой уровень познаний в линуксе примерно (первый раз, в первый класс. Т.е. почти нулевой)

Интересный выбор для новичка. Вам даже интернет не всегда поможет. Иногда бывают особенности, специфичные для дистрибутива. Да даже для версии дистрибутива!

Новичку как правило рекомендуют что-то попсовое) когда ответ при первом же запросе к гуглу. Это семейство ubuntu-подобных (не советую), Mint (сразу всё настроено, красиво и удобно, насчёт стабильности не скажу), или чистый Debian (но тут уже подготовка минимальная нужна. Или если есть кому подсказать).

И то что вы мне сейчас написали про DE и прочие штуки

DE — это то, что вы видите на мониторе после авторизации. Именно благодаря ей вы можете открывать и таскать окошечки по рабочему столу, да и вообще увидеть рабочий стол.
DE, в мире линукс, бывают разные. KDE, GNOME3, MATE, Cinnamon и другие. Визуально они отличаются значительно. Да и кушают по-разному.
Без DE как правило (не всегда), пользователя встретит чёрный с мигающим курсором. который попросит логин.

PS удачи в начинаниях изучения мира *NIX!

PPS всё же интересно, зачем RDP? Что мешает познакомиться с ОС на реальном железе? Или хотя бы в виртуальной машине. что тоже не совсем удобно.

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

А вот то, что вы описали «система->параметры->персональные ->запускаемые приложения.» в консоле мне как это оформить? В графе мне не удобно работать(

Покажи тело скрипта, если не секрет. Возможно, получится сделать для него Xsession-враппер, который будет вместо DE сразу запускать RDP-клиент.

А вообще, для тонких клиентов есть специализированные дистрибутивы, например ThinStation.

Читайте также:  Лагает диспетчер задач windows 10

#! /bin/sh i=l while [$i]; do /usr/bin/rdesktop -k en-us -a24 -u имя домена \\-5 -r disk:disk=/mnt/ auto -r sound:local:alsa -f адрес сервера

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

В xfce — настройки -> сеансы и запуск -> автозапуск. Запустится после (авто)входа юзера в DE (в гномокедах тоже что-то такое должно быть)
/thread

Во-первых, для такого лучше использовать LORCODE ( [ code][ /code] в твоём случае, без пробелов).

Во-вторых, можно сделать вот такой Desktop-файл:

А вообще, всё уже давно сделано за нас и в GNOME3 есть поддержка аналогичного «RDP Kiosk» на базе клиента Remmina.

Вообще я уже писала ранее, что к нему нет вопросов.

А у меня есть, именно в таком виде он не рабочий. Как написали выше используйте www.linux.org.ru/help/lorcode.md а конкретно тэг code

Зачем здесь while? while — это цикл, к тому же while 1 — это зацикленный цикл.

Если вам неудобно это делать в графической оболочке, то сделайте это раз на какой-нибудь машине с этим ДЕ, а затем посреством grep и find найдите куда это DE добавило настройку.

Т.е. подключаетесь в графическую оболочку, добавляете в запуск скрипт, а далее смотрите:

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

Это ОТК, что-ли? Там вроде своя оболочка консольная была для этих целей. У меня такая коробочка как сканер принтер используется, как буду там могу посмотреть как автозапуск графики сделан.

А вот то, что вы описали «система->параметры->персональные ->запускаемые приложения.» в консоле мне как это оформить? В графе мне не удобно работать(

После добавления нового пункта в этой, в директории
ls -l

/ — домашняя директория пользователя)
появится новый файл. Именно он вам и нужен.
В следующий раз его просто с помощью скрипта можно закинуть автоматически.
И да, это решение уже было.
Любое действие с помощью мышки в Linux можно выполнить с помощью консоли.

Да это отк. Скрипт рабочий! прописав команду

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

Типо так : идешь /сюда /пишешь/это готово!

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

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

И я буду признательна если, вы мне напишите(извините за грубость) инструкцию для тупых)

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

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

Команда ‘grep’ тебе в помощь.

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

Поэтому, просто проделай САМА действия по добавлению скрипта в автозапуск в графическую оболочку руками, а потом посмотри куда прописался автозапуск.

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

Ну вот и спроси у них, ты же всё равно игнорируешь советы этого форума. Тем более им за это деньги платят.

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

Источник

Оцените статью