init.d Скрипты автозапуска при включении, выключении системы.
Для того, чтобы скрипт запускался автоматически во время запуска системы, надо создать символическую ссылку на скрипт и разместить её в каталоге /etc/rc.d/rcN.d, где N уровень выполнения скрипта.
Уровень 0
остановка системы (halt) — работа системы должна быть прекращена.
Уровень 1
однопользовательский режим работы — консоль восстановления.
Уровень 2
многопользовательский режим — пользователи могут работать на разных терминалах.
Уровень 3
многопользовательский сетевой режим — осуществляется настройка сети и запускаются сетевые службы.
Уровень 4
практически не используется.
Уровень 5
запуск графической подсистемы X11 — вход в систему осуществляется уже в графическом режиме.
Уровень 6
перезагрузка системы — останавливаются все запущенные программы и производится перезагрузка.
Чаще всего во время загрузки системы используются уровни загрузки 3 или 5.
Имя ссылки в каталоге /etc/rc.d/rcN.d имеет особый смысл, например: если сыылки /etc/rc.d/rcN.d/@K99cpu_t и /etc/rc.d/rcN.d/@S00cpu_t указывают на один и тот же файл /etc/init.d/cpu_t, то скрипт @K99cpu_t будет выполнять в cpu_t блок кода, соответствующий останову системы, а скрипт @S00cpu_t будет выполнять в cpu_t блок кода, соответствующий старту системы, Две цифры в начале имени символической ссылки определяют порядок запуска скриптов в каталоге /etc/rc.d/rcN.d.
Cкрипт запуска должен иметь специальный формат, например такой:
#!/bin/sh # chkconfig: - 98 02 # description: Описание процесса # processname: Имя процесса # Source function library. if [ -f /etc/init.d/functions ] ; then . /etc/init.d/functions elif [ -f /etc/rc.d/init.d/functions ] ; then . /etc/rc.d/init.d/functions else exit 0 fi KIND="Имя_сервиса" start() < echo -n $"Starting $KIND services: " daemon /usr/local/sbin/исполняемый_файл echo >stop() < echo -n $"Shutting down $KIND services: " killproc исполняемый_файл echo >restart() < echo -n $"Restarting $KIND services: " killproc исполняемый_файл daemon /usr/local/sbin/исполняемый_файл echo >case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) echo $"Usage: $0" exit 1 esac exit $?
Главное тут в следующем, во первых скрипт должен иметь как минимум 3 возможных ключа запуска, это: start, stop, restart, поскольку именно эти основные команды используются для запуска, останова и перезапуска. Плюс ко всему к этому в самом начале файла пишутся те самые заветные цифры отвечающие за последовательность запуска:
# chkconfig: — 98 02
Где 98 это номер в последовательности запуска, а 02 это номер последовательности останова.
То есть, проще говоря, этот скрипт запуститься 98мым в последовательности очередей, а будет остановлен 2рым.
Итак для того чтоб добавить скрипт и добавить его в автозагрузку надо произвести следующую последовательность действий:
1. Создать исполняемый скрипт по шаблону приведёному выше, заменив исполняемый_файл именем файла который надо запустить.
2. Разместить исполняемый скрипт в /etc/rc.d/init
3. Выполнить команду chkconfig —add исполняемый_скрипт
4. Выполнить команду setup или servicevonf (в зависимости от того работаете вы в графическом режиме или консоли) и выбрать службу, которая будет носить имя исполняемый_скрипт.
Выполнение скрипта при включении/отключении сети
Есть директория /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. Например, строка
после включения сети выполнит скрипт script.sh. Подробнее можно почитать в man interfaces.
В любом случае на скрипт должны быть установлены права, разрешающие выполнение, иначе он не сможет запуститься.
Знакомство с Linux: каталог /etc/init.d
Если вы используете Linux, вы, скорее всего, слышали о init.d каталог. Но что именно делает этот каталог? В конечном итоге он делает одно, но он делает одно для всей вашей системы, поэтому init.d очень важно. В init.d Каталог содержит ряд сценариев запуска / остановки для различных служб в вашей системе. Все от острый к x11-общий управляется из этого каталога. Конечно, не все так просто.
Если вы посмотрите на /так далее каталог вы найдете каталоги, которые находятся в форме rc # .d (Где # — число, отражающее конкретный уровень инициализации — от 0 до 6). В каждом из этих каталогов есть несколько других сценариев, управляющих процессами. Эти сценарии начинаются с буквы «K» или «S». Все сценарии «K» выполняются перед сценариями «S». И в зависимости от того, где расположены сценарии, будет определяться момент их запуска. Между каталогами системные службы работают вместе, как хорошо отлаженная машина. Но бывают случаи, когда вам нужно запустить или остановить процесс чисто и без использования команд kill или killall. Вот где /etc/init.d каталог пригодится.
Теперь, если вы используете такой дистрибутив, как Fedora, вы можете найти этот каталог в /etc/rc.d/init.d . Независимо от местоположения, он служит той же цели.
Чтобы управлять любым из скриптов в init.d вручную у вас должен быть root (или sudo) доступ. Каждый сценарий будет запускаться как команда, и структура команды будет выглядеть так:
куда команда это фактическая команда для запуска и ВАРИАНТ может быть одним из следующих:
- Начало
- стоп
- перезагрузить
- начать сначала
- принудительная перезагрузка
Чаще всего вы будете использовать либо старт, стоп, или начать сначала. Итак, если вы хотите остановить свою сеть, вы можете выполнить команду:
Или, если вы вносите изменения в свою сеть и вам нужно ее перезапустить, вы можете сделать это с помощью следующей команды:
Некоторые из наиболее распространенных сценариев инициализации в этом каталоге:
Конечно, в вашем каталоге могут быть более часто используемые сценарии — это зависит от того, что вы установили. Приведенный выше список был взят из установки Ubuntu Server 8.10, поэтому в стандартной настольной установке будет несколько меньше скриптов сетевого типа.
А как насчет /etc/rc.local
Есть третий вариант, который я использовал довольно часто. Этот вариант является /etc/rc.local сценарий. Этот файл запускается после того, как были выполнены все остальные сценарии уровня инициализации, поэтому можно безопасно вводить различные команды, которые вы хотите запускать при запуске. Много раз я помещал в этот скрипт инструкции по установке для таких вещей, как nfs. Это также хорошее место для размещения сценариев «устранения неполадок». Например, однажды у меня была машина, на которой по какой-то причине самба не хотел запускаться. Даже после проверки, чтобы убедиться, что демон Samba настроен для инициализации при загрузке. Поэтому вместо того, чтобы тратить на это все свое время, я просто поместил строку:
в /etc/rc.local скрипт и Samba работали как шарм. В конце концов, я возвращался и решал эту проблему.
Вывод
Linux гибок. Linux настолько гибок, что почти неизбежно существует множество способов решить одну проблему. Одна из таких проблем — запуск системной службы. С помощью /etc/init.d система (а также /etc/rc.local ) вы можете быть уверены, что ваша служба запустится.
Смотрите так же:
- Thunderbird 68.0 вышел: крупное обновление почтового клиента
- HP выпускает микропрограмму принтера, чтобы отменить блокировку чернильных картриджей сторонних производителей
- Как добавить RSS-канал на страницу Facebook
- Ластик перестал работать, исправить внутри
в чем разница автозапуска /etc/init.d и /etc/systemd/system
нужное приложение обоими вариантами можно добавить и запустить.
а в чем отличие этих вариантов?

Regacar ★
17.09.21 08:44:22 MSK
Разница в системе инициализации. Если у тебя systemd, то нужно использовать второй вариант.
ox55ff ★★★★★
( 17.09.21 08:46:57 MSK )
У тебя че гента? Если гента то лучше удалить systemd и оставить init
Dumppper001 ★
( 17.09.21 08:47:57 MSK )
Последнее исправление: Dumppper001 17.09.21 08:48:06 MSK (всего исправлений: 1)
Ответ на: комментарий от ox55ff 17.09.21 08:46:57 MSK

а почему нужно? И второй вариант это systemd или что?
вот у меня такой скрипт работает https://gist.github.com/jdupl/dafdd0925d4a43c81d6d и как его перенести в /etc/systemd/system
Regacar ★
( 17.09.21 09:24:06 MSK ) автор топика
Ответ на: комментарий от Dumppper001 17.09.21 08:47:57 MSK

Regacar ★
( 17.09.21 09:24:44 MSK ) автор топика
Ответ на: комментарий от Regacar 17.09.21 09:24:06 MSK
Иди и читай про systemd, что за вопросы. На форуме за тебя твою работу делать не будут.
Legioner ★★★★★
( 17.09.21 10:33:31 MSK )
Ответ на: комментарий от Regacar 17.09.21 09:24:06 MSK
Не надо никуда переносить, всё же работает. Совместимость с /etc/init.d никто вроде удалять не собирался.
Не сломалось — не чини.
firkax ★★★★★
( 17.09.21 10:46:59 MSK )
Ответ на: комментарий от ox55ff 17.09.21 08:46:57 MSK
firkax ★★★★★
( 17.09.21 10:47:33 MSK )
Ответ на: комментарий от Regacar 17.09.21 09:24:06 MSK
Посмотрел по диагонали. Какой ужас. Функция обновления не должна выполнятся системой инициализации. Принцип разделения ответственности.
ox55ff ★★★★★
( 17.09.21 10:57:24 MSK )
Ответ на: комментарий от firkax 17.09.21 10:47:33 MSK
Да. systemd — мейнстрим. Если не хочешь остаться на обочине, нужно изучать актуальные технологии.
ox55ff ★★★★★
( 17.09.21 10:57:55 MSK )
Ответ на: комментарий от ox55ff 17.09.21 10:57:55 MSK
Это не технология. И изучать там нечего.
firkax ★★★★★
( 17.09.21 11:13:50 MSK )
Ответ на: комментарий от firkax 17.09.21 11:13:50 MSK
ox55ff ★★★★★
( 17.09.21 11:18:15 MSK )
Ответ на: комментарий от ox55ff 17.09.21 11:18:15 MSK
Не нужно рыться в помойке.
А скрипты важных сервисов у меня в /usr/local/etc/rc.d вообще, никаких systemd там разумеется нет, впрочем как и sysv init.
firkax ★★★★★
( 17.09.21 11:19:39 MSK )
Последнее исправление: firkax 17.09.21 11:21:14 MSK (всего исправлений: 1)
Ответ на: комментарий от ox55ff 17.09.21 10:57:55 MSK
Да. systemd — мейнстрим. Если не хочешь остаться на обочине
Именно, все равно придется когда то, так чего сопротивляться?
alex_sim ★★★★
( 17.09.21 11:23:20 MSK )
Ответ на: комментарий от firkax 17.09.21 11:13:50 MSK
Так чего тогда сопротивляемся, если ничего не надо изучать?
Тем более правильно заметили, сложного нет там ничего
alex_sim ★★★★
( 17.09.21 11:25:31 MSK )
Последнее исправление: alex_sim 17.09.21 11:26:50 MSK (всего исправлений: 1)
Ответ на: комментарий от alex_sim 17.09.21 11:25:31 MSK
У него есть уже работающий скрипт. Ничего не сломалось. Зачем его куда-то переделывать? Ну, если нет никаких других интересных дел, можно и заняться настройками ради настроек.
firkax ★★★★★
( 17.09.21 12:03:40 MSK )
Ответ на: комментарий от ox55ff 17.09.21 10:57:24 MSK
Посмотрел по диагонали. Какой ужас. Функция обновления не должна выполнятся системой инициализации. Принцип разделения ответственности.
Она и не выполняется системой инициализации. Система инициализации вызывает этот скрипт с start|stop. А update делается когда скрипт вызывается с параметром update — вручную. Это просто скрипт технического сопровождения minecraft сервера, с интерфейсом к sysvinit в том числе, но имеющий и другие функции.
Его ответственность — обёртка взаимодействия с интерактивным джава-блобом в консольную команду. И всё с ним хорошо.
firkax ★★★★★
( 17.09.21 12:17:16 MSK )
Ответ на: комментарий от Regacar 17.09.21 09:24:06 MSK
Если очень хочется, можешь написать для systemd заглушку, которая будет вызывать этот скрипт с start и stop параметром. Но вообще такая заглушка там и так есть, для всех скриптов сразу.
Команды `systemctl start minecraft` и `systemctl stop minecraft` работают же?
firkax ★★★★★
( 17.09.21 12:19:43 MSK )
Последнее исправление: firkax 17.09.21 12:20:53 MSK (всего исправлений: 1)
Ответ на: комментарий от firkax 17.09.21 12:17:16 MSK
А update делается когда скрипт вызывается с параметром update — вручную.
Я это и имею в виду. В один скрипт намешано. Должен быть отдельный скрипт для обновления. Если ему нужно остановить сервис, то он идёт на поклон к системе инициализации.
Хейтите sd за монолитизм в пику юниксвейности, а сами тем же самым занялись.
ox55ff ★★★★★
( 17.09.21 12:24:22 MSK )
Ответ на: комментарий от ox55ff 17.09.21 12:24:22 MSK
Хейтите sd за монолитизм в пику юниксвейности, а сами тем же самым занялись.
Я нигде не хейтил монолитизм, и вообще в религиозных спорах не участвовал. systemd просто весь кривой — ибо его писали странные люди, вот и все претензии.
Раскидывать управление монолитом (каковым является minecraft server) по куче разных мест — это как раз плохо. Что-нить исправишь в одном месте, про другое забудешь. А так всё в одном файле который целиком и обновляется.
firkax ★★★★★
( 17.09.21 12:40:01 MSK )
Ответ на: комментарий от firkax 17.09.21 12:03:40 MSK
Осиливать, может и не надо, но разобраться стоит. Это хороший повод.
WitcherGeralt ★★
( 17.09.21 15:24:41 MSK )
Ответ на: комментарий от Dumppper001 17.09.21 08:47:57 MSK

У тебя че гента? Если гента то лучше удалить systemd и оставить init
init.d стартовые скрипты Debian
Файлы, начинающиеся с «K» или «k» являются убивающими (kill) скриптами, они завершают процессы или упорядочивают их действия (последствия).
Файлы, которые начинаются с «S» или «s» — это запускающие (startup) скрипты, они начинают новые процессы или подготавливают систему к работе с этим уровнем запуска.
Большинство из них являются скриптами shell, и большая часть их будет символическими ссылками (чаще всего на /etc/init.d/).
добавление скрипта в автозагрузку:
update-rc.d имя_скрипта defaults
удаление скрипта из автозагрузки:
update-rc.d -f имя_скрипта remove
- dzek
- 27 августа 2015, 08:55