<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="http://178.140.10.58:8080/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://178.140.10.58:8080/feed.php">
        <title>Библиотека знаний - init</title>
        <description>Заметки IT программиста</description>
        <link>http://178.140.10.58:8080/</link>
        <image rdf:resource="http://178.140.10.58:8080/lib/exe/fetch.php?media=wiki:dokuwiki.svg" />
       <dc:date>2026-04-17T10:36:51+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=init:%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_runit_%D0%B4%D0%BB%D1%8F_%D1%81%D0%B2%D0%BE%D0%B8%D1%85_%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2"/>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=init:%D0%BA%D0%B0%D0%BA_%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B6%D0%B0%D0%B5%D1%82%D1%81%D1%8F_linux"/>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=init:start"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://178.140.10.58:8080/lib/exe/fetch.php?media=wiki:dokuwiki.svg">
        <title>Библиотека знаний</title>
        <link>http://178.140.10.58:8080/</link>
        <url>http://178.140.10.58:8080/lib/exe/fetch.php?media=wiki:dokuwiki.svg</url>
    </image>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=init:%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_runit_%D0%B4%D0%BB%D1%8F_%D1%81%D0%B2%D0%BE%D0%B8%D1%85_%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2">
        <dc:format>text/html</dc:format>
        <dc:date>2019-12-09T20:14:20+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Использование runit для своих сервисов</title>
        <link>http://178.140.10.58:8080/doku.php?id=init:%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_runit_%D0%B4%D0%BB%D1%8F_%D1%81%D0%B2%D0%BE%D0%B8%D1%85_%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2</link>
        <description>&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:debian&amp;amp;do=showtag&amp;amp;tag=debian&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:debian&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; debian&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:remove&amp;amp;do=showtag&amp;amp;tag=remove&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:remove&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; remove&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:systemd&amp;amp;do=showtag&amp;amp;tag=systemd&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:systemd&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; systemd&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:sysv&amp;amp;do=showtag&amp;amp;tag=sysv&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:sysv&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; sysv&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:system&amp;amp;do=showtag&amp;amp;tag=system&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:system&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; system&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:init&amp;amp;do=showtag&amp;amp;tag=init&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:init&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; init&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;использование_runit_для_своих_сервисов&quot;&gt;Использование runit для своих сервисов&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Супервизор сервисов &lt;a href=&quot;http://smarden.org/runit/&quot; class=&quot;urlextern&quot; title=&quot;http://smarden.org/runit/&quot; rel=&quot;ugc nofollow&quot;&gt;runit&lt;/a&gt; позиционируется как замена стандартным скриптам инициализации Unix.
&lt;/p&gt;

&lt;p&gt;
Но на практике оказалось, что runit идеален для управления сервисами безотносительно инициализации и т.п.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 runit \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435_runit_\u0434\u043b\u044f_\u0441\u0432\u043e\u0438\u0445_\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;49-522&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit2&quot; id=&quot;введение&quot;&gt;Введение&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Супервизор берёт на себя такой функционал, как:
превращение любого процесса в демон;
логгирование вывода процесса и ротирование логов;
запуск, остановка, рестарт, запрос состояния, управляющие скрипты для init.d;
выключение и запуск сервисов автоматически при появлении новых сервисов в списке либо удалении старых из списка;
возможность ведения нескольких независимых списков сервисов одновременно (например, для каждого пользователя отдельно и для системы в целом);
удобный &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt; для управления сервисами.
&lt;/p&gt;

&lt;p&gt;
Для большинства операционных систем runit уже входит в репозитории пакетов (apt-get install runit). Кроме того, мы имеем уже &lt;a href=&quot;http://smarden.org/runit/runscripts.html&quot; class=&quot;urlextern&quot; title=&quot;http://smarden.org/runit/runscripts.html&quot; rel=&quot;ugc nofollow&quot;&gt;готовый набор рецептов&lt;/a&gt; (ссылку придётся поправить, хабр сломал её) для популярных сервисов (nginx, apache etc.).
&lt;/p&gt;

&lt;p&gt;
Далее рассмотрим стандартную схему runit (которая используется по умолчанию):
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;523-2058&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit3&quot; id=&quot;демонизация&quot;&gt;Демонизация&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Каждый сервис описывается отдельным каталогом /etc/sv/&amp;lt;название сервиса&amp;gt;.
&lt;/p&gt;

&lt;p&gt;
обычно достаточно иметь в этом каталоге исполняемый скрипт run вида
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;#!/bin/bash
exec 2&amp;gt;&amp;amp;1

exec your_running_command&lt;/pre&gt;

&lt;p&gt;
Важно, чтобы your_running_command не демонизировала себя (не отсоединялась от стандартных потоков stdin, stdout, stderr).
&lt;/p&gt;

&lt;p&gt;
Переадресация ошибок в стандартный вывод нужна для их логгирования. Выполняется логгирование, если в каталоге /etc/sv/&amp;lt;название сервиса&amp;gt;/log/ разместить файл run вида
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;#!/bin/bash
LOG_FOLDER=/var/log/&amp;lt;название сервиса&amp;gt;
mkdir -p $LOG_FOLDER
exec svlogd -tt $LOG_FOLDER&lt;/pre&gt;

&lt;p&gt;
Сервисы, расположенные в каталоге /etc/sv/, не выполняются, пока ссылки на них не будут размещены в каталоге /etc/service/.
&lt;/p&gt;

&lt;p&gt;
Как только вы сделаете ln -s /etc/sv/&amp;lt;название сервиса&amp;gt; /etc/service/&amp;lt;название сервиса&amp;gt;, сервис runsvdir увидит новый сервис, и запустит его. Более того, в случае остановки сервиса он будет автоматически перезапущен. Это даёт гораздо более быструю реакцию на остановку сервиса по сравнению с использованием сервисов мониторинга (god или monit).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u0435\u043c\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u0435\u043c\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;2059-3816&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit4&quot; id=&quot;ротирование_логов&quot;&gt;Ротирование логов&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
При использовании svlogd логи размещаются в папке, которую Вы указали при её запуске. При этом текущий лог находится в файле current, и периодически выполняется ротирование логов в этой папке. 
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0420\u043e\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u043e\u0433\u043e\u0432&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0440\u043e\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435_\u043b\u043e\u0433\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;3817-4208&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit5&quot; id=&quot;управление&quot;&gt;Управление&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Запускать, останавливать, перезапускать сервисы можно с помощью команды sv (start|stop|restart…) &amp;lt;название сервиса&amp;gt;.
&lt;/p&gt;

&lt;p&gt;
Кроме того, при запуске сервиса появится каталог /etc/service/&amp;lt;название сервиса&amp;gt;/supervise, в котором будут расположены очень полезные файлы и потоки:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;pid — идентификатор процесса Unix;
stat — человеко-читаемое состояние сервиса
status — машинно-читаемое состояние процесса
control — поток управления&lt;/pre&gt;

&lt;p&gt;
и так далее…
&lt;/p&gt;

&lt;p&gt;
Можно отметить, что для остановки или запуска процесса достаточно открыть поток control на запись, и отправить туда символ d (от down) или u (от up) соответственно.
&lt;/p&gt;

&lt;p&gt;
В стиле init.d
&lt;/p&gt;

&lt;p&gt;
Нет ничего проще, чем поддержать управление в стиле init.d.
&lt;/p&gt;

&lt;p&gt;
Просто делаем ln -s /usr/bin/sv /etc/init.d/&amp;lt;название сервиса&amp;gt;. sv поймёт, что его вызвали в стиле init.d, и готов будет принимать команды вида /etc/init.d/&amp;lt;название сервиса&amp;gt; start etc. Совсем немного магии, правда?
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;4209-5737&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit6&quot; id=&quot;настройка_сервисов&quot;&gt;Настройка сервисов&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
В комплекте с runit поставляется утилита chpst, которая позволяет выполнять сервисы с дополнительной настройкой (ограничивать размер памяти, запускать из под определенного пользователя, с другим уровнем nice и т.д.).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430_\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;5738-6174&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit7&quot; id=&quot;резюме&quot;&gt;Резюме&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
runit оказался настолько удобен и надёжен для организации своих сервисов, что мы стараемcя переводить все наши демоны под runit, заодно отказываясь от различного геморроя в виде пакетов демонизации а ля daemons gem. Также на части машин мы избавились от Monit (где требовался лишь мониторинг процессов).
&lt;/p&gt;

&lt;p&gt;
Крайне рекомендую к прочтению комментарий от powerman, а также статью про Web-интерфейс к runit.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0420\u0435\u0437\u044e\u043c\u0435&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0440\u0435\u0437\u044e\u043c\u0435&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;6175-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=init:%D0%BA%D0%B0%D0%BA_%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B6%D0%B0%D0%B5%D1%82%D1%81%D1%8F_linux">
        <dc:format>text/html</dc:format>
        <dc:date>2019-12-09T20:14:04+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Как загружается Linux</title>
        <link>http://178.140.10.58:8080/doku.php?id=init:%D0%BA%D0%B0%D0%BA_%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B6%D0%B0%D0%B5%D1%82%D1%81%D1%8F_linux</link>
        <description>&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:debian&amp;amp;do=showtag&amp;amp;tag=debian&quot; class=&quot;wikilink1&quot; title=&quot;tag:debian&quot; rel=&quot;tag&quot;&gt;debian&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:remove&amp;amp;do=showtag&amp;amp;tag=remove&quot; class=&quot;wikilink1&quot; title=&quot;tag:remove&quot; rel=&quot;tag&quot;&gt;remove&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:systemd&amp;amp;do=showtag&amp;amp;tag=systemd&quot; class=&quot;wikilink1&quot; title=&quot;tag:systemd&quot; rel=&quot;tag&quot;&gt;systemd&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:sysv&amp;amp;do=showtag&amp;amp;tag=sysv&quot; class=&quot;wikilink1&quot; title=&quot;tag:sysv&quot; rel=&quot;tag&quot;&gt;sysv&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:system&amp;amp;do=showtag&amp;amp;tag=system&quot; class=&quot;wikilink1&quot; title=&quot;tag:system&quot; rel=&quot;tag&quot;&gt;system&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:init&amp;amp;do=showtag&amp;amp;tag=init&quot; class=&quot;wikilink1&quot; title=&quot;tag:init&quot; rel=&quot;tag&quot;&gt;init&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;как_загружается_linux&quot;&gt;Как загружается Linux&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Когда я осваивал Linux, мне было очень интересно что происходит при загрузке системы. Попытка разобраться в процессе загрузки привела меня в исходники загрузочных скриптов (/etc/inittab, /etc/rc*, /etc/init.d/*, …) и их конфигов (/etc/sysconfig/*, /etc/cond.f/*, …). Надо отметить серьёзные размеры и сложность этих скриптов - чтобы в них разобраться потребовалось немало времени. Но я в те времена искренне верил, что загрузка это сложный процесс, и что размеры и сложность загрузочных скриптов вполне оправданы.
Когда меня окончательно достал RedHat, я решил собрать свой дистрибутив на базе LFS. Для своего дистрибутива пришлось самостоятельно разрабатывать загрузочные скрипты, и тут-то выяснилась правда: ничего сложного в процессе загрузки нет!
Проработав 2.5 года на своём дистрибутиве (PoWeR Linux) я мигрировал на Gentoo (на качественную поддержку своего просто не хватало времени). Изучив загрузочные скрипты Gentoo я пришёл в ужас! Их размеры и сложность были ещё больше, чем у старого RedHat. После детального изучения стала ясна причина: один и тот же комплект загрузочных скриптов использовался и для LiveCD и для обычной системы - такой себе универсальный монстрик.&lt;br/&gt;

   Так что при переходе на Gentoo я решил взять загрузочные скрипты из PoWeR Linux а стандартные Gentoo-шные не использовать (т.е. у меня от Gentoo используется только portage). И с тех пор ещё 4 года эти скрипты работают у меня на домашней рабочей станции и кучке удалённых серверов.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u0430\u043a \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f Linux&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u0430\u043a_\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f_linux&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;49-2643&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;характеристики&quot;&gt;Характеристики&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Размер скриптов (всех вместе) - 316 строк, 7.5KB:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;$ wc 1 3 lib.sh 
 199  703 5152 1
  89  272 1671 3
  28  118  770 lib.sh
 316 1093 7593 итого&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;2644-2873&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;минусы&quot;&gt;Минусы:&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Всё в одном файле - при обновлении приложений практически невозможно автоматически обновить код инициализации этого приложения. Например, когда обновляется ALSA, то пакет может просто заменить файлы /etc/init.d/alsasound, /etc/conf.d/alsasound, /etc/modules.d/alsa. А в моём случае админу нужно будет ручками править /etc/runit/1.
Нет поддержки всего на свете. Например, я не использую RAID и LVM - так что команды для их инициализации вам нужно будет добавлять самостоятельно.
Вам нужно будет самостоятельно поддерживать эти скрипты. Я обычно при обновлении Gentoo поглядываю на изменения в (неиспользуемых мной) /etc/init.d/* скриптах и если меняется что-то важное - обновляю свои скрипты. Но, на практике, необходимость в таких изменениях возникает примерно раз в два года.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041c\u0438\u043d\u0443\u0441\u044b:&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043c\u0438\u043d\u0443\u0441\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;2874-4223&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;плюсы&quot;&gt;Плюсы:&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Всё в одном небольшом файле - нет необходимости разыскивать по куче скриптов и их конфигов где настраивается то, что вам понадобилось; можно быстро и легко увидеть все базовые настройки системы.
&lt;/p&gt;

&lt;p&gt;
Есть поддержка всего, что мне и моим друзьям за 6.5 лет было нужно на домашних компах и серверах.
&lt;/p&gt;

&lt;p&gt;
Идеальны для изучения процесса инициализации Linux. Вы работаете с реальными базовыми командами Linux, которые одинаковы во всех дистрибутивах, а не со скриптами и конфигами специфичными для вашего дистрибутива.
&lt;/p&gt;

&lt;p&gt;
Ускоряют загрузку системы. У меня домашняя машина грузится в single user mode (6 консолек с getty, syslog, klog, gpm) за 16.5 секунд. Я экспериментировал с параллельной загрузкой в стиле initng - эффект скорее отрицательный за счёт усложнения скриптов и порождения лишних процессов. Initng хорош для ускорения загрузки традиционных, раздутых скриптов, выполняющих множество ненужных действий, а в моём случае ускорять просто нечего. :)
Не смотря на малый размер эти скрипты не только надёжно и быстро грузят систему, но и поддерживают несколько фич облегчающих жизнь админу:
&lt;/p&gt;

&lt;p&gt;
Выполняемые команды сгруппированы в блоки по типам. В процессе загрузки выводятся названия блоков, с информацией были ли ошибки при выполнении команд блока.
Если при выполнении блока команд были ошибки - выводится детальная информация по командам этого блока и возникшим ошибкам, после чего система ждёт 5 секунд нажатия любой кнопки для запуска bash и ручного исправления ошибок. После выхода из bash предлагается либо продолжить загрузку либо перегрузиться. Если ничего не нажимать, загрузка продолжится.
Логи всего, что выводится при загрузке и отключении на экран (названия блоков команд и информация по возникающим ошибкам) сохраняются в файлах /var/log/boot, /var/log/shutdown. Благодаря этому можно на удалённых серверах посмотреть, как проходила загрузка/отключение.
Пример сообщений выводимых при загрузке
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt; + UDEV
 + MODULES
 + SYSCTL
 + MTAB
 - MOUNTALL
++ swapon -a
++ false
EXIT CODE: 1
++ mount -at nocoda,nonfs,noproc,noncpfs,nosmbfs,noshm
... press any key in 5 seconds to open shell ...
 + CLEANTMP
 + RANDOMSEED
 + HWCLOCK
 + SENSORS
 + LOADKEYS
 + SOUND
 + HOST_NAME
 + ENVUPDATE
 + NETWORK
 + RUNIT
 + DMESG&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u043b\u044e\u0441\u044b:&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u043b\u044e\u0441\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;4224-7982&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit5&quot; id=&quot;runit&quot;&gt;Runit&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Для загрузки я вместо SysV init использую Runit. Runit не поддерживает /etc/inittab, вместо этого в нём используется простая схема:
При загрузке запускается скрипт /etc/runit/1. Его задача полностью проинициализировать систему.
По завершению скрипта /etc/runit/1 запускается скрипт /etc/runit/2, который должен запустить все необходимые сервисы (syslog, getty, ssh, apache, …).
Когда пользователь останавливает/перегружает систему запускается скрипт /etc/runit/3 который должен подготовить систему к отключению (завершить все процессы, отмонтировать диски, etc.).
При желании можно настроить SysVinit для работы в том же стиле:
Запуск /etc/runit/{1,2,3} из SysVinit: /etc/inittab
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;id:3:initdefault:
rc::bootwait:/etc/runit/1
l0:0:wait:/bin/sh -c &amp;#039;/etc/runit/3; exec /sbin/halt&amp;#039;
l3:3:once:/etc/runit/2
l6:6:wait:/bin/sh -c &amp;#039;/etc/runit/3; exec /sbin/reboot&amp;#039;
ca:12345:ctrlaltdel:/sbin/shutdown -r now&lt;/pre&gt;

&lt;p&gt;
Сервисы
Для запуска всех сервисов (getty, syslog, mysql, etc.) я использую тот же runit (по сути это просто немного улучшенный вариант daemontools). Но это отдельная большая тема, так что просто уточню что в этой статье скриптов для запуска сервисов нет, здесь только инициализация/отключение системы.
&lt;/p&gt;

&lt;p&gt;
Исходники
Вспомогательные функции: &lt;strong&gt;/etc/runit/lib.sh&lt;/strong&gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;#!/bin/bash
startlog() { exec 3&amp;gt;&amp;amp;1 4&amp;gt;&amp;amp;2 1&amp;gt; &amp;gt;(tee $1) 2&amp;gt;&amp;amp;1; }
stoplog() { exec 1&amp;gt;&amp;amp;3- 2&amp;gt;&amp;amp;4-; }

wanna() {
    echo -e &amp;quot;\a... press any key in $2 seconds to $1 ...&amp;quot;
    read -t $2 -n 1 -s &amp;lt;/dev/console
}
emergency() {
    if wanna &amp;quot;open shell&amp;quot; 5; then
        bash --norc &amp;lt;/dev/console &amp;amp;&amp;gt;/dev/console
        if [[ &amp;quot;$0&amp;quot; == &amp;quot;/etc/runit/1&amp;quot; ]] &amp;amp;&amp;amp; wanna &amp;quot;reboot now&amp;quot; 3; then
            exit 100
        fi
    fi
}

trace() { trap &amp;#039;ERR=$?&amp;#039; ERR; set -Ex; $1 2&amp;gt;&amp;amp;1; set +Ex; trap ERR; } 2&amp;gt;&amp;amp;-
try() {
    local output=$( trace $1 )
    if [[ &amp;quot;$output&amp;quot; =~ &amp;quot;ERR=&amp;quot; ]]; then
        echo -e &amp;quot;\e[1m\e[31m - \e[37m$1\e[0m&amp;quot;
        echo &amp;quot;$output&amp;quot; | sed $&amp;#039;s/.*ERR=\(.*\)/\a\033[36mEXIT CODE: \\1\033[0m/g&amp;#039;
        emergency
    else
        echo -e &amp;quot;\e[1m\e[32m + \e[37m$1\e[0m&amp;quot;
    fi
}&lt;/pre&gt;

&lt;p&gt;
Startup: &lt;strong&gt;/etc/runit/1&lt;/strong&gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;#!/bin/bash

CONSOLE() {
    dmesg -n 1
}

INIT() {
    mount -n -t proc  none /proc
    mount -n -t sysfs none /sys
    mount -n -t ramfs none /dev
    mknod -m 660 /dev/console c 5 1
    mknod -m 660 /dev/null c 1 3
    ln -snf /proc/self/fd /dev/fd   # needed for startlog in /etc/runit/lib.sh
}

UDEV() {
    udevstart

    ### Standard add-on
    ln -snf /proc/self/fd/0 /dev/stdin
    ln -snf /proc/self/fd/1 /dev/stdout
    ln -snf /proc/self/fd/2 /dev/stderr
    ln -snf /proc/kcore /dev/core
    mkdir /dev/pts
    mkdir /dev/shm
    mount -n -t devpts -o gid=5,mode=0620 none /dev/pts

    ### My custom add-on
    ln -s vcs /dev/vcs0
    ln -s dvd2 /dev/dvd
    ln -s cdrom2 /dev/cdrom
    mkdir /dev/lirc
    mknod /dev/lirc/0 c 61 0
    mknod /dev/vmmon c 10 165
    mknod /dev/sdb  b 8  16
    mknod /dev/sdb1 b 8  17
}

MODULES() {
    update-modules

    ### Network
    modprobe -q skge
    modprobe -q 8139too media=56 # 1=10half 17=10full 56=100full
    modprobe -q sky2

    ### Lirc
    setserial /dev/ttyS1 uart none
    modprobe -q lirc_serial io=0x2f8 irq=3 # io=0x3f8 irq=4

    ### VMware
    modprobe -q vmmon
    modprobe -q vmnet
}

SYSCTL() {
    sysctl -p /etc/sysctl.conf
}

MTAB() {
    # Adding already-mounted fs to /etc/mtab
    &amp;gt;/etc/mtab
    mount -f /
    awk &amp;#039;$2 != &amp;quot;/&amp;quot; {print}&amp;#039; /proc/mounts &amp;gt;&amp;gt; /etc/mtab
    for i in $(cut -d &amp;#039; &amp;#039; -f 2 &amp;lt;/etc/mtab); do mount -f -o remount &amp;quot;$i&amp;quot;; done
}

MOUNTALL() {
    swapon -a
    mount -at nocoda,nonfs,noproc,noncpfs,nosmbfs,noshm
}

CLEANTMP() {
    # Cleaning up temporary files and locks, prepare utmp &amp;amp; wtmp
    rm -rf /var/lib/net-scripts/state/*
    rm -rf /var/run/console.lock /var/run/console/* # reset pam_console
    find /var/lock -type f -print0 | xargs -0 rm -f --
    find /var/run ! -type d ! -name utmp ! -name innd.pid \
        ! -name random-seed -exec rm -f -- {} \;
    &amp;gt; /var/lock/.keep
    rm -f /tmp/.X*-lock /tmp/esrv* /tmp/kio* /tmp/jpsock.* /tmp/.fam* /tmp/iceauth.* /tmp/xauth.*
    rm -rf /tmp/.esd* /tmp/orbit-* /tmp/ssh-* /tmp/ksocket-* /tmp/.*-unix
    rm -rf /tmp/.{ICE,X11}-unix
    mkdir -p /tmp/.{ICE,X11}-unix
    chmod 1777 /tmp/.{ICE,X11}-unix
}

RANDOMSEED() {
    # Restoring random-seed.
    [ -f /var/run/random-seed ] &amp;amp;&amp;amp; cat /var/run/random-seed &amp;gt;&amp;gt;/dev/urandom
    rm -f /var/run/random-seed
    ( umask 077 ; dd if=/dev/urandom of=/var/run/random-seed count=1 2&amp;gt;/dev/null )
}

HWCLOCK() {
    if [ ! -f /etc/adjtime ]; then echo &amp;quot;0.0 0 0.0&amp;quot; &amp;gt; /etc/adjtime ; fi
    hwclock --adjust --localtime
    hwclock --hctosys --localtime
}

SENSORS() {
    sensors -s
}

LOADKEYS() {
    # Commands for TTY initialization like &amp;#039;setfont&amp;#039; and &amp;#039;echo -ne &amp;quot;\033(K&amp;quot;&amp;#039;
    # shouldn&amp;#039;t be executed in /etc/runit/1 because:
    # - which TTYs should be initialized may depend on current runlevel
    # - if TTY state become broken (for ex. after &amp;#039;cat /dev/urandom&amp;#039;),
    #   then after logout and login TTY state should be reinitialized
    # these commands should be executed before each getty invocation instead.
    loadkeys koi2   # -q windowkeys
}

SOUND() {
    alsactl -f /etc/asound.state restore
}

HOST_NAME() {
    hostname home
    echo &amp;quot;HOSTNAME=&amp;#039;$(hostname)&amp;#039;&amp;quot; &amp;gt;/etc/env.d/01hostname
}

ENVUPDATE() {
    env-update.sh -u
}

NETWORK() {
    ifconfig lo 127.0.0.1 up
    route add -net 127.0.0.0 netmask 255.0.0.0 gw 127.0.0.1 dev lo
    iptables-restore &amp;lt;/etc/iptables
    ifconfig eth2 192.168.2.1 broadcast 192.168.2.255 netmask 255.255.255.0
    ifconfig eth2:0 192.168.2.254
    ifconfig eth1 192.168.1.2 broadcast 192.168.1.255 netmask 255.255.255.0
    ifconfig eth0 192.168.10.2 broadcast 192.168.10.255 netmask 255.255.255.0
    #route add default gw 192.168.1.1 dev eth1
}

RUNIT() {
    # Set default action (shutdown or not) if Ctrl+Alt+Del pressed,
    # but /etc/runit/ctrlaltdel don&amp;#039;t setup /etc/runit/stopit.
    touch /etc/runit/stopit
    chmod 100 /etc/runit/stopit
    
    # Set default action on shutdown (halt or reboot) if:
    # - /etc/runit/1 crash or exit 100
    # - /etc/runit/2 exit non 111
    # - Ctrl+Alt+Del pressed, but /etc/runit/ctrlaltdel don&amp;#039;t setup /etc/runit/reboot
    touch /etc/runit/reboot
    chmod 100 /etc/runit/reboot
    
    # Set runlevel to:
    # - single      if kernel has param: S
    # - RUNLEVELNAME    if kernel has param: runlevel=RUNLEVELNAME
    # - default     if kernel has no params or unable to set requested runlevel
    grep -q &amp;#039;\(^\| \)S\( \|$\)&amp;#039; /proc/cmdline &amp;amp;&amp;amp; runlevel=&amp;#039;single&amp;#039;
    runsvchdir ${runlevel:-default} || runsvchdir default
}

SEND_MAIL() {
    echo -e &amp;quot;To: root\nSubject: reboot at $(date)&amp;quot; | sendmail -t
}

DMESG() {
    # Create an &amp;#039;after-boot&amp;#039; dmesg log
    touch /var/log/dmesg
    chmod 640 /var/log/dmesg
    dmesg &amp;gt; /var/log/dmesg
}


PATH=/sbin:/usr/sbin:/bin:/usr/bin
trap &amp;#039;:&amp;#039; INT QUIT TSTP
. /etc/runit/lib.sh

try CONSOLE
try INIT
startlog /var/log/boot
try UDEV
try MODULES
try SYSCTL
try MTAB
try MOUNTALL
try CLEANTMP
try RANDOMSEED
try HWCLOCK
try SENSORS
try LOADKEYS
try SOUND
try HOST_NAME
try ENVUPDATE
try NETWORK
try RUNIT
#try SEND_MAIL
try DMESG
stoplog

# Select next stage (exit 0 for stage 2, exit 100 for stage 3):
exit 0&lt;/pre&gt;

&lt;p&gt;
Shutdown: &lt;strong&gt;/etc/runit/3&lt;/strong&gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;#!/bin/bash

CONSOLE() {
    chvt 1
    # Required in case getty was last process in this console and it leave
    # console in broken state (\n work as &amp;lt;LF&amp;gt; without &amp;lt;CR&amp;gt;).
    { stty sane ; echo ; } &amp;gt;/dev/console
}

TERM() {
    # Give a chance for all processes for clean exit.
    # This also will kill all &amp;#039;runsvdir&amp;#039; and signal all &amp;#039;runsv&amp;#039; to exit.
    killall5 -15
}

HWCLOCK() {
    hwclock --systohc --localtime
}

SERVICES() {
    sv force-stop /var/service/* &amp;amp;&amp;gt;/dev/null || :
}

SOUND() {
    alsactl -f /etc/asound.state store
}

RANDOMSEED() {
    umask 077
    dd if=/dev/urandom of=/var/run/random-seed count=1 2&amp;gt;/dev/null
}

NETWORK() {
    for i in $(ifconfig | grep &amp;#039;^[^ ]&amp;#039; | cut -d &amp;#039; &amp;#039; -f 1 | tac); do
        ifconfig &amp;quot;$i&amp;quot; down
    done
}

WTMP() {
    /sbin/halt -w
}

KILL() {
    # Goodbye to everybody...
    killall5 -9
}

UMOUNTPSEUDO() {
    # Unmounting memory filesystems:
    umount -a -t tmpfs
    swapoff -a
    # Unmounting loopback devices first:
    for d in $(grep &amp;#039;^/dev/loop&amp;#039; /proc/mounts | cut -d &amp;#039; &amp;#039; -f 2 | tac); do
        eval &amp;quot;umount -d -r -f $&amp;#039;$d&amp;#039;&amp;quot;
    done
    umount -d -r -f -a -O bind 
}

UMOUNTHDD() {
    # Unmounting all filesystems:
    for d in $(egrep -v &amp;#039;^[^/]|^/dev/root&amp;#039; /proc/mounts | cut -d &amp;#039; &amp;#039; -f 2 | tac); do
        eval &amp;quot;umount -d -r -f $&amp;#039;$d&amp;#039;&amp;quot;
    done
}

FINI() {
    sync; sync
    mount -n -o remount,ro / || { sleep 1; mount -n -o remount,ro /; }
}


PATH=/sbin:/usr/sbin:/bin:/usr/bin
trap &amp;#039;:&amp;#039; INT QUIT TSTP
. /etc/runit/lib.sh

try CONSOLE
startlog /var/log/shutdown
try TERM
try HWCLOCK
try SERVICES
try SOUND
try RANDOMSEED
try NETWORK
try WTMP
try KILL
try UMOUNTPSEUDO
try UMOUNTHDD
stoplog
try FINI&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Runit&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;runit&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;7983-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=init:start">
        <dc:format>text/html</dc:format>
        <dc:date>2019-12-09T20:10:05+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Автоматический запуск в linux</title>
        <link>http://178.140.10.58:8080/doku.php?id=init:start</link>
        <description>&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:debian&amp;amp;do=showtag&amp;amp;tag=debian&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:debian&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; debian&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:remove&amp;amp;do=showtag&amp;amp;tag=remove&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:remove&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; remove&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:systemd&amp;amp;do=showtag&amp;amp;tag=systemd&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:systemd&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; systemd&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:sysv&amp;amp;do=showtag&amp;amp;tag=sysv&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:sysv&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; sysv&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:system&amp;amp;do=showtag&amp;amp;tag=system&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:system&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; system&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:init&amp;amp;do=showtag&amp;amp;tag=init&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:init&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; init&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;автоматический_запуск_в_linux&quot;&gt;Автоматический запуск в linux&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0432 linux&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439_\u0437\u0430\u043f\u0443\u0441\u043a_\u0432_linux&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;49-114&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;upstart&quot;&gt;UpStart&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
/etc/init содержит конфигурационные файлы для супервизора сервисов &amp;quot;UpStart&amp;quot;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;UpStart&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;upstart&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;115-265&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;команды&quot;&gt;Команды&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;$ initctl list
$ initctl start &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;SERVICENAME&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
$ initctl stop &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;SERVICENAME&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u043e\u043c\u0430\u043d\u0434\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u043e\u043c\u0430\u043d\u0434\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;266-385&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;system-v&quot;&gt;System-V&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
/etc/init.d содержит конфигурационные файлы для супервизора сервисов &amp;quot;Systemv&amp;quot;.
/ect/rc.[n] - содержит ссылки на конфигурационные скрипты, где n - уровень запуска
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 Runlevel 0 is halt. - Остановка системы
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 Runlevel 1 is single-user. - Однопользовательский режим
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 Runlevels 2-5 are multi-user. - Многопользовательский режим
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 Runlevel 6 is reboot. - Перезагрузка
&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;
/etc/inittab - содержит инструкции запуска 
/etc/init.d/rc.local - Запускает скрипты из /etc/rc.local
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=debian:remove-systemd&quot; class=&quot;wikilink1&quot; title=&quot;debian:remove-systemd&quot; data-wiki-id=&quot;debian:remove-systemd&quot;&gt;Удаление Systemd из Debian 8&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=debian:start:run-with-nohup&quot; class=&quot;wikilink1&quot; title=&quot;debian:start:run-with-nohup&quot; data-wiki-id=&quot;debian:start:run-with-nohup&quot;&gt;Запуск PHP скрипта с использованием nohup&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;System-V&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;system-v&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;386-1178&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;команды1&quot;&gt;Команды&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;$ &lt;span class=&quot;kw2&quot;&gt;ls&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;etc&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;init.d&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;
$ &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;etc&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;init.d&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;SERVICENAME&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt; start
$ &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;etc&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;init.d&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;SERVICENAME&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt; stop&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u043e\u043c\u0430\u043d\u0434\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u043e\u043c\u0430\u043d\u0434\u044b1&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;1179-1309&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;systemd&quot;&gt;Systemd&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=system:init:systemd&quot; class=&quot;wikilink1&quot; title=&quot;system:init:systemd&quot; data-wiki-id=&quot;system:init:systemd&quot;&gt;Systemd&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=debian:remove-systemd&quot; class=&quot;wikilink1&quot; title=&quot;debian:remove-systemd&quot; data-wiki-id=&quot;debian:remove-systemd&quot;&gt;Удаление Systemd из Debian 8&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Systemd&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;systemd&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;1310-1389&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;команды2&quot;&gt;Команды&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;$ systemctl list-unit-files
$ systemctl start &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;SERVICENAME&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
$ systemctl stop &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;SERVICENAME&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
$ systemctl &lt;span class=&quot;kw3&quot;&gt;enable&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;SERVICENAME&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
$ systemctl disable &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;SERVICENAME&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u043e\u043c\u0430\u043d\u0434\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u043e\u043c\u0430\u043d\u0434\u044b2&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;1390-1593&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;runit&quot;&gt;Runit&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=init:%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_runit_%D0%B4%D0%BB%D1%8F_%D1%81%D0%B2%D0%BE%D0%B8%D1%85_%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2&quot; class=&quot;wikilink1&quot; title=&quot;init:использование_runit_для_своих_сервисов&quot; data-wiki-id=&quot;init:использование_runit_для_своих_сервисов&quot;&gt;Использование runit для своих сервисов&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=init:%D0%BA%D0%B0%D0%BA_%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B6%D0%B0%D0%B5%D1%82%D1%81%D1%8F_linux&quot; class=&quot;wikilink1&quot; title=&quot;init:как_загружается_linux&quot; data-wiki-id=&quot;init:как_загружается_linux&quot;&gt;Как загружается Linux&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Runit&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;runit&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;1594-&amp;quot;} --&gt;</description>
    </item>
</rdf:RDF>
