http://wiki.rosalab.com/ru/index.php?title=Systemd_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2,_%D1%87%D0%B0%D1%81%D1%82%D1%8C_3:_HOW-TO:_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_SysV_init-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0_%D0%B2_systemd_service-%D1%84%D0%B0%D0%B9%D0%BB&feed=atom&action=historySystemd для администраторов, часть 3: HOW-TO: преобразование SysV init-скрипта в systemd service-файл - История изменений2024-03-29T07:26:58ZИстория изменений этой страницы в викиMediaWiki 1.26.4http://wiki.rosalab.com/ru/index.php?title=Systemd_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2,_%D1%87%D0%B0%D1%81%D1%82%D1%8C_3:_HOW-TO:_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_SysV_init-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0_%D0%B2_systemd_service-%D1%84%D0%B0%D0%B9%D0%BB&diff=6841&oldid=prevPastorDi в 09:30, 30 мая 20122012-05-30T09:30:27Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;' lang='ru'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Предыдущая</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Версия 09:30, 30 мая 2012</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l1" >Строка 1:</td>
<td colspan="2" class="diff-lineno">Строка 1:</td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Традиционно, службы Unix и Linux (демоны) запускаются через SysV init-скрипты. Эти скрипты пишутся на языке Bourne Shell ({{Источник|/bin/sh}}), располагаются в специальном каталоге (обычно {{Источник|/etc/rc.d/init.d/}}) и вызываются с одним из стандартных параметров ('''start''', '''stop''', '''reload''' и т.п.) &#8212; таким образом указывается действие, которое необходимо прозвести над службой (запустить, остановить, заставить перечитать конфигурацию). При запуске службы такой скрипт, как правило, вызывает бинарник демона, который, в свою очередь, форкается, порождая фоновый процесс (т.е.  демонизируется). Заметим, что shell-скрипты, как правило, отличается низкой скоростью работы, излишней подробностью изложения и крайней хрупкостью. Читать их, из-за изобилия всевозможного вспомогательного и дополнительного кода, чрезвычайно тяжело. Впрочем, нельзя не упомянуть, что эти скрипты являются очень гибким инструментом (ведь, по сути, это всего лишь код, который можно модифицировать как угодно). С другой стороны, многие задачи, возникающие при работе со службами, довольно тяжело решить средствами shell-скриптов. К таким задачам относятся: организация параллельного исполнения, корректное отслеживание процессов, конфигурирование различных параметров среды исполнения процесса. {{Программа|systemd}} обеспечивает совместимость с init-скриптами, однако, с учетом описанных выше их недостатков, более правильным решением будет использование штатных service-файлов {{Программа|systemd}} для всех установленных в системе служб. Стоит отметить что, в отличие от init-скриптов, которые часто приходится</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Традиционно, службы Unix и <ins class="diffchange diffchange-inline">[[ROSA релиз|</ins>Linux<ins class="diffchange diffchange-inline">]] </ins>(демоны) запускаются через SysV init-скрипты. Эти скрипты пишутся на языке Bourne Shell ({{Источник|/bin/sh}}), располагаются в специальном каталоге (обычно {{Источник|/etc/rc.d/init.d/}}) и вызываются с одним из стандартных параметров ('''start''', '''stop''', '''reload''' и т.п.) &#8212; таким образом указывается действие, которое необходимо прозвести над службой (запустить, остановить, заставить перечитать конфигурацию). При запуске службы такой скрипт, как правило, вызывает бинарник демона, который, в свою очередь, форкается, порождая фоновый процесс (т.е.  демонизируется). Заметим, что shell-скрипты, как правило, отличается низкой скоростью работы, излишней подробностью изложения и крайней хрупкостью. Читать их, из-за изобилия всевозможного вспомогательного и дополнительного кода, чрезвычайно тяжело. Впрочем, нельзя не упомянуть, что эти скрипты являются очень гибким инструментом (ведь, по сути, это всего лишь код, который можно модифицировать как угодно). С другой стороны, многие задачи, возникающие при работе со службами, довольно тяжело решить средствами shell-скриптов. К таким задачам относятся: организация параллельного исполнения, корректное отслеживание процессов, конфигурирование различных параметров среды исполнения процесса. {{Программа|systemd}} обеспечивает совместимость с init-скриптами, однако, с учетом описанных выше их недостатков, более правильным решением будет использование штатных service-файлов {{Программа|systemd}} для всех установленных в системе служб. Стоит отметить что, в отличие от init-скриптов, которые часто приходится</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>модифицировать при переносе из одного дистрибутива в другой, один и тот же '''service-файл''' будет работать в любом дистрибутиве, использующем {{Программа|systemd}} (а таких дистрибутивов с каждым днем становится все больше и больше). Далее мы вкратце рассмотрим процесс преобразования SysV init-скрипта в service-файл {{Программа|systemd}}.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>модифицировать при переносе из одного дистрибутива в другой, один и тот же '''service-файл''' будет работать в любом дистрибутиве, использующем {{Программа|systemd}} (а таких дистрибутивов с каждым днем становится все больше и больше). Далее мы вкратце рассмотрим процесс преобразования SysV init-скрипта в service-файл {{Программа|systemd}}.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l94" >Строка 94:</td>
<td colspan="2" class="diff-lineno">Строка 94:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>{{Примечание|Все материалы данного цикла статей распростроняются под лицензией [http://creativecommons.org/licenses/by-sa/3.0/ Creative Commons Attribution-ShareAlike (BY-SA)]}}</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>{{Примечание|Все материалы данного цикла статей распростроняются под лицензией [http://creativecommons.org/licenses/by-sa/3.0/ Creative Commons Attribution-ShareAlike (BY-SA)]}}</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">[[Категория:Документация]]</ins></div></td></tr>
</table>PastorDihttp://wiki.rosalab.com/ru/index.php?title=Systemd_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2,_%D1%87%D0%B0%D1%81%D1%82%D1%8C_3:_HOW-TO:_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_SysV_init-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0_%D0%B2_systemd_service-%D1%84%D0%B0%D0%B9%D0%BB&diff=521&oldid=prevPastorDi в 16:12, 11 августа 20112011-08-11T16:12:53Z<p></p>
<a href="http://wiki.rosalab.com/ru/index.php?title=Systemd_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2,_%D1%87%D0%B0%D1%81%D1%82%D1%8C_3:_HOW-TO:_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_SysV_init-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0_%D0%B2_systemd_service-%D1%84%D0%B0%D0%B9%D0%BB&diff=521&oldid=515">Внесённые изменения</a>PastorDihttp://wiki.rosalab.com/ru/index.php?title=Systemd_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2,_%D1%87%D0%B0%D1%81%D1%82%D1%8C_3:_HOW-TO:_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_SysV_init-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0_%D0%B2_systemd_service-%D1%84%D0%B0%D0%B9%D0%BB&diff=515&oldid=prevPastorDi в 14:10, 11 августа 20112011-08-11T14:10:20Z<p></p>
<a href="http://wiki.rosalab.com/ru/index.php?title=Systemd_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2,_%D1%87%D0%B0%D1%81%D1%82%D1%8C_3:_HOW-TO:_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_SysV_init-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0_%D0%B2_systemd_service-%D1%84%D0%B0%D0%B9%D0%BB&diff=515&oldid=514">Внесённые изменения</a>PastorDihttp://wiki.rosalab.com/ru/index.php?title=Systemd_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2,_%D1%87%D0%B0%D1%81%D1%82%D1%8C_3:_HOW-TO:_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_SysV_init-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0_%D0%B2_systemd_service-%D1%84%D0%B0%D0%B9%D0%BB&diff=514&oldid=prevPastorDi в 14:06, 11 августа 20112011-08-11T14:06:54Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;' lang='ru'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Предыдущая</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Версия 14:06, 11 августа 2011</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l16" >Строка 16:</td>
<td colspan="2" class="diff-lineno">Строка 16:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>задачам относятся: организация параллельного исполнения, корректное</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>задачам относятся: организация параллельного исполнения, корректное</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>отслеживание процессов, конфигурирование различных параметров среды исполнения</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>отслеживание процессов, конфигурирование различных параметров среды исполнения</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>процесса. systemd обеспечивает совместимость с init-скриптами, однако, с учетом</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>процесса. <ins class="diffchange diffchange-inline">{{Программа|</ins>systemd<ins class="diffchange diffchange-inline">}} </ins>обеспечивает совместимость с init-скриптами, однако, с учетом</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>описанных выше их недостатков, более правильным решением будет использование</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>описанных выше их недостатков, более правильным решением будет использование</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>штатных service-файлов systemd для всех установленных в системе служб. Стоит</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>штатных service-файлов <ins class="diffchange diffchange-inline">{{Программа|</ins>systemd<ins class="diffchange diffchange-inline">}} </ins>для всех установленных в системе служб. Стоит</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>отметить что, в отличие от init-скриптов, которые часто приходится</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>отметить что, в отличие от init-скриптов, которые часто приходится</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>модифицировать при переносе из одного дистрибутива в другой, один и тот же</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>модифицировать при переносе из одного дистрибутива в другой, один и тот же</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>service-файл будет работать в любом дистрибутиве, использующем systemd (а таких</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>service-файл будет работать в любом дистрибутиве, использующем <ins class="diffchange diffchange-inline">{{Программа|</ins>systemd<ins class="diffchange diffchange-inline">}} </ins>(а таких</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>дистрибутивов с каждым днем становится все больше и больше). Далее мы вкратце</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>дистрибутивов с каждым днем становится все больше и больше). Далее мы вкратце</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>рассмотрим процесс преобразования SysV init-скрипта в service-файл systemd.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>рассмотрим процесс преобразования SysV init-скрипта в service-файл systemd.</div></td></tr>
<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l28" >Строка 28:</td>
<td colspan="2" class="diff-lineno">Строка 28:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>работоспособный service-файл для какого-либо демона, настоятельно рекомендуем</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>работоспособный service-файл для какого-либо демона, настоятельно рекомендуем</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>вам отправить этот файл разработчикам. Вопросы по полноценной интеграции</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>вам отправить этот файл разработчикам. Вопросы по полноценной интеграции</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>демонов с systemd, с максимальным использованием всех его возможностей, будут</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>демонов с <ins class="diffchange diffchange-inline">{{Программа|</ins>systemd<ins class="diffchange diffchange-inline">}}</ins>, с максимальным использованием всех его возможностей, будут</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>рассмотрены в последующих статьях этого цикла, пока же ограничимся ссылкой на</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>рассмотрены в последующих статьях этого цикла, пока же ограничимся ссылкой на</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[http://0pointer.de/public/systemd-man/daemon.html страницу] официальной</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[http://0pointer.de/public/systemd-man/daemon.html страницу] официальной</div></td></tr>
<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l127" >Строка 127:</td>
<td colspan="2" class="diff-lineno">Строка 127:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Вот и все. Мы получили минимальный рабочий service-файл systemd. Чтобы проверить</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Вот и все. Мы получили минимальный рабочий service-файл systemd. Чтобы проверить</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>его работоспособность, скопируем его в <tt>/etc/systemd/system/abrtd.service</tt>, после</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>его работоспособность, скопируем его в <tt>/etc/systemd/system/abrtd.service</tt>, после</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>чего командой <del class="diffchange diffchange-inline"><tt></del>systemctl daemon-reload<del class="diffchange diffchange-inline"></tt> </del>уведомим systemd об изменении</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>чего командой <ins class="diffchange diffchange-inline">{{cmd|</ins>systemctl daemon-reload<ins class="diffchange diffchange-inline">}} </ins>уведомим systemd об изменении</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>конфигурации. Теперь нам остается только запустить нашу службу: <del class="diffchange diffchange-inline"><tt></del>systemctl start</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>конфигурации. Теперь нам остается только запустить нашу службу: <ins class="diffchange diffchange-inline">{{cmd|</ins>systemctl start</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>abrtd.service<del class="diffchange diffchange-inline"></tt></del>. Проверить состояние службы можно командой <del class="diffchange diffchange-inline"><tt></del>systemctl status</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>abrtd.service<ins class="diffchange diffchange-inline">}}</ins>. Проверить состояние службы можно командой <ins class="diffchange diffchange-inline">{{cmd|</ins>systemctl status</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>abrtd.service<del class="diffchange diffchange-inline"></tt></del>, а чтобы остановить ее, нужно скомандовать <del class="diffchange diffchange-inline"><tt></del>systemctl stop</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>abrtd.service<ins class="diffchange diffchange-inline">}}</ins>, а чтобы остановить ее, нужно скомандовать <ins class="diffchange diffchange-inline">{{cmd|</ins>systemctl stop</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>abrtd.service<del class="diffchange diffchange-inline"></tt></del>. И наконец, команда <del class="diffchange diffchange-inline"><tt></del>systemctl enable abrtd.service<del class="diffchange diffchange-inline"></tt> </del>выполнит</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>abrtd.service<ins class="diffchange diffchange-inline">}}</ins>. И наконец, команда <ins class="diffchange diffchange-inline">{{cmd|</ins>systemctl enable abrtd.service<ins class="diffchange diffchange-inline">}} </ins>выполнит</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>установку service-файла, обеспечив его активацию при каждой загрузке (аналог</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>установку service-файла, обеспечив его активацию при каждой загрузке (аналог</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline"><tt></del>chkconfig abrtd on<del class="diffchange diffchange-inline"></tt> </del>в классическом SysV).</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">{{cmd|</ins>chkconfig abrtd on<ins class="diffchange diffchange-inline">}} </ins>в классическом SysV).</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Приведенный выше service-файл является практический точным переводом исходного</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Приведенный выше service-файл является практический точным переводом исходного</div></td></tr>
<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l176" >Строка 176:</td>
<td colspan="2" class="diff-lineno">Строка 176:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>процесса инициализации регистрируют свое имя на шине D-Bus<sup>[5]</sup>. ABRTd относится к</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>процесса инициализации регистрируют свое имя на шине D-Bus<sup>[5]</sup>. ABRTd относится к</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>ним. С новыми настройками, systemd запустит процесс abrtd, который уже не будет</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>ним. С новыми настройками, systemd запустит процесс abrtd, который уже не будет</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>форкаться (согласно указанным нами ключам <del class="diffchange diffchange-inline">&#171;<tt></del>-d -s<del class="diffchange diffchange-inline"></tt>&#187;</del>), и в качестве момента</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>форкаться (согласно указанным нами ключам <ins class="diffchange diffchange-inline">{{cmd|</ins>-d -s<ins class="diffchange diffchange-inline">}}</ins>), и в качестве момента</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>окончания периода запуска данной службы systemd будет рассматривать момент</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>окончания периода запуска данной службы systemd будет рассматривать момент</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>регистрации имени <tt>com.redhat.abrt</tt> на шине D-Bus. В этом случае основным</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>регистрации имени <tt>com.redhat.abrt</tt> на шине D-Bus. В этом случае основным</div></td></tr>
</table>PastorDihttp://wiki.rosalab.com/ru/index.php?title=Systemd_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2,_%D1%87%D0%B0%D1%81%D1%82%D1%8C_3:_HOW-TO:_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_SysV_init-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0_%D0%B2_systemd_service-%D1%84%D0%B0%D0%B9%D0%BB&diff=506&oldid=prevPastorDi в 13:23, 11 августа 20112011-08-11T13:23:19Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;' lang='ru'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Предыдущая</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Версия 13:23, 11 августа 2011</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l237" >Строка 237:</td>
<td colspan="2" class="diff-lineno">Строка 237:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Исходная статья: [http://0pointer.de/blog/projects/systemd-for-admins-3 systemd for Administrators, Part III: How Do I Convert A SysV Init Script Into A systemd Service File?], автор Lennart Poettering.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Исходная статья: [http://0pointer.de/blog/projects/systemd-for-admins-3 systemd for Administrators, Part III: How Do I Convert A SysV Init Script Into A systemd Service File?], автор Lennart Poettering.<ins class="diffchange diffchange-inline"><br /></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">Оригинал русского перевода [http://wiki.opennet.ru/Systemd_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2%2C_%D1%87%D0%B0%D1%81%D1%82%D1%8C_3:_HOW-TO:_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_SysV_init-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0_%D0%B2_systemd_service-%D1%84%D0%B0%D0%B9%D0%BB находится здесь]</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">{{Примечание|Все материалы данного цикла статей распростроняются под лицензией [http://creativecommons.org/licenses/by-sa/3.0/ Creative Commons Attribution-ShareAlike (BY-SA)]}}</ins></div></td></tr>
</table>PastorDihttp://wiki.rosalab.com/ru/index.php?title=Systemd_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2,_%D1%87%D0%B0%D1%81%D1%82%D1%8C_3:_HOW-TO:_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_SysV_init-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0_%D0%B2_systemd_service-%D1%84%D0%B0%D0%B9%D0%BB&diff=502&oldid=prevPastorDi: Новая страница: «Традиционно, службы Unix и Linux (демоны) запускаются через SysV init-скрипты. Эти скрипты пишутся н...»2011-08-11T13:18:39Z<p>Новая страница: «Традиционно, службы Unix и Linux (демоны) запускаются через SysV init-скрипты. Эти скрипты пишутся н...»</p>
<p><b>Новая страница</b></p><div>Традиционно, службы Unix и Linux (демоны) запускаются через SysV init-скрипты.<br />
Эти скрипты пишутся на языке Bourne Shell (<tt>/bin/sh</tt>), располагаются в<br />
специальном каталоге (обычно <tt>/etc/rc.d/init.d/</tt>) и вызываются с одним из<br />
стандартных параметров (<tt>start</tt>, <tt>stop</tt>, <tt>reload</tt> и т.п.) &#8212; таким образом<br />
указывается действие, которое необходимо прозвести над службой (запустить,<br />
остановить, заставить перечитать конфигурацию). При запуске службы такой<br />
скрипт, как правило, вызывает бинарник демона, который, в свою очередь,<br />
форкается, порождая фоновый процесс (т.е. демонизируется). Заметим, что<br />
shell-скрипты, как правило, отличается низкой скоростью работы, излишней<br />
подробностью изложения и крайней хрупкостью. Читать их, из-за изобилия<br />
всевозможного вспомогательного и дополнительного кода, чрезвычайно тяжело.<br />
Впрочем, нельзя не упомянуть, что эти скрипты являются очень гибким<br />
инструментом (ведь, по сути, это всего лишь код, который можно модифицировать<br />
как угодно). С другой стороны, многие задачи, возникающие при работе со<br />
службами, довольно тяжело решить средствами shell-скриптов. К таким<br />
задачам относятся: организация параллельного исполнения, корректное<br />
отслеживание процессов, конфигурирование различных параметров среды исполнения<br />
процесса. systemd обеспечивает совместимость с init-скриптами, однако, с учетом<br />
описанных выше их недостатков, более правильным решением будет использование<br />
штатных service-файлов systemd для всех установленных в системе служб. Стоит<br />
отметить что, в отличие от init-скриптов, которые часто приходится<br />
модифицировать при переносе из одного дистрибутива в другой, один и тот же<br />
service-файл будет работать в любом дистрибутиве, использующем systemd (а таких<br />
дистрибутивов с каждым днем становится все больше и больше). Далее мы вкратце<br />
рассмотрим процесс преобразования SysV init-скрипта в service-файл systemd.<br />
Вообще говоря, service-файл должен создаваться разработчиками каждого демона, и<br />
включаться в комплект его поставки. Если вам удалось успешно создать<br />
работоспособный service-файл для какого-либо демона, настоятельно рекомендуем<br />
вам отправить этот файл разработчикам. Вопросы по полноценной интеграции<br />
демонов с systemd, с максимальным использованием всех его возможностей, будут<br />
рассмотрены в последующих статьях этого цикла, пока же ограничимся ссылкой на<br />
[http://0pointer.de/public/systemd-man/daemon.html страницу] официальной<br />
документации.<br />
<br />
Итак, приступим. В качестве пример возьмем init-скрипт демона ABRT (Automatic<br />
Bug Reporting Tool, службы, занимающейся сбором crash dump'ов). Исходный скрипт<br />
(в варианте для дистрибутива Fedora) можно загрузить<br />
[http://0pointer.de/public/abrtd здесь].<br />
<br />
Начнем с того, что прочитаем исходный скрипт (неожиданный ход, правда?) и<br />
выделим полезную информацию из груды хлама. Практически у всех init-скриптов<br />
большая часть кода является чисто вспомогательной, и мало чем отличается от<br />
одного скрипта к другому. Как правило, при создании новых скриптов этот код<br />
просто копируется из уже существующих (разработка в стиле copy-paste). Итак, в<br />
исследуемом скрипте нас интересует следующая информация:<br />
<br />
* Строка описания службы: &#171;Daemon to detect crashing apps&#187;. Как нетрудно заметить, комментарии в заголовке скрипта весьма пространны и описывают не сколько саму службу, сколько скрипт, ее запускающий. service-файлы systemd также включают описание, но оно относится исключительно к службе, а не к service-файлу.<br />
<br />
* LSB-заголовок<sup>[1]</sup>, содержащий информацию о зависимостях. systemd, базирующийся на идеях socket-активации, обычно не требует явного описания зависимостей (либо требует самого минимального описания). Заметим, что основополагающие принципы systemd, включая socket-активацию, рассмотрены в статье [http://0pointer.de/blog/projects/systemd.html Rethinking PID 1], в которой systemd был впервые представлен широкой публике. Ее русский перевод можно прочитать здесь: [http://tux-the-penguin.blogspot.com/2010/09/systemd.html часть 1], [http://tux-the-penguin.blogspot.com/2010/09/systemd-ii.html часть 2]. Возвращаясь к нашему примеру: в данном случае ценной информацией о зависимостях является только строка <tt>Required-Start: $syslog</tt>, сообщающая, что для работы abrtd требуется демон системного лога. Информация о второй зависимости, <tt>$local_fs</tt>, является избыточной, так как systemd приступает к запуску служб уже после того, как все файловые системы готовы для работы.<br />
<br />
* Также, LSB-заголовок сообщает, что данная служба должна быть запущена на уровнях исполнения (runlevels) 3 (консольный многопользовательский) и 5 (графический многопользовательской).<br />
<br />
* Исполняемый бинарник демона называется <tt>/usr/sbin/abrtd</tt>.<br />
<br />
Вот и вся полезная информация. Все остальное содержимое 115-строчного скрипта<br />
является чисто вспомогательным кодом: операции синхронизации и упорядочивания<br />
запуска (код, относящийся к lock-файлам), вывод информационных сообщений<br />
(команды echo), разбор входных параметров (монструозный блок case).<br />
<br />
На основе приведенной выше информации, мы можем написать следующий<br />
service-файл:<br />
<br />
<pre><br />
[Unit]<br />
Description=Daemon to detect crashing apps<br />
After=syslog.target<br />
<br />
[Service]<br />
ExecStart=/usr/sbin/abrtd<br />
Type=forking<br />
<br />
[Install]<br />
WantedBy=multi-user.target<br />
</pre><br />
<br />
Рассмотрим этот файл поподробнее.<br />
<br />
Секция <tt>[Unit]</tt> содержит самую общую информацию о службе. Не будем забывать,<br />
что systemd управляет не только службами, но и многими другими объектами,<br />
в частности, устройствами, точками монтирования, таймерами и т.п. Общее<br />
наименование всех этих объектов &#8212; юнит (unit). Одноименная секция<br />
конфигурационного файла определяет наиболее общие свойства, которые могут быть<br />
присущи любому юниту. В нашем случае это, во-первых, строка описания, и<br />
во-вторых, указание, что данный юнит рекомендуется активировать после запуска<br />
демона системного лога<sup>[2]</sup>. Эта информация, как мы помним, была указана в<br />
LSB-заголовке исходного init-скрипта. В нашем конфигурационном файле мы<br />
указываем зависимость от демона системного лога при помощи директивы <tt>After</tt>,<br />
указывающей на юнит <tt>syslog.taget</tt>. Это специальный юнит, позволяющий ссылаться на<br />
любую реализацию демона системного лога, независимо от используемой программы<br />
(например, rsyslog или syslog-ng) и типа активации (как обычной службы или через<br />
log-сокет). Подробнее о таких специальных юнитах можно почитать<br />
[http://0pointer.de/public/systemd-man/systemd.special.html страницу]<br />
официальной документации. Обратите внимание, что директива After, в отсутствие<br />
директивы <tt>Requires</tt>, задает лишь порядок загрузки, но не задает жесткой<br />
зависимости. То есть, если при загрузке конфигурация systemd будет предписывать<br />
запуск как демона системного лога, так и abrtd, то сначала будет запущен демон<br />
системного лога, и только потом abrtd. Если же конфигурация не будет содержать<br />
явного указания запустить демон системного лога, он не будет запущен даже при<br />
запуске abrtd. И это поведение нас полностью устраивает, так как abrtd<br />
прекрасно может обходиться и без демона системного лога. В противном случае,<br />
мы могли бы воспользоваться директивой <tt>Requires</tt>, задающей жесткую зависимость<br />
между юнитами.<br />
<br />
Следующая секция, <tt>[Service]</tt>, содержит информацию о службе. Сюда включаются<br />
настройки, относящие именно к службам, но не к другим типам юнитов. В нашем<br />
случае, таких настроек две: <tt>ExecStart</tt>, определяющая расположение бинарника демона и<br />
аргументы, с которыми он будет вызван (в нашем случае они отсутствуют), и Type,<br />
позволяющая задать метод, по которому systemd определит окончание периода<br />
запуска службы. Традиционный для Unix метод демонизации процесса, когда исходный<br />
процесс форкается, порождая демона, после чего завершается, описывается типом<br />
<tt>forking</tt> (как в нашем случае). Таким образом, systemd считает службу запущенной с<br />
момента завершения работы исходного процесса, и рассматривает в качестве<br />
основного процесса этой службы порожденный им процесс-демон.<br />
<br />
И наконец, третья секция, <tt>[Install]</tt>. Она содержит рекомендации по установке<br />
конкретного юнита, указывающие, в каких ситуациях он должен быть активирован.<br />
В нашем случае, служба abrtd запускается при активации юнита <tt>multi-user.target</tt>.<br />
Это специальный юнит, примерно соответствующий роли третьего уровня исполнения<br />
классического SysV<sup>[3]</sup>. Директива <tt>WantedBy</tt> никак не влияет на уже<br />
работающую службу, но она играет важную роль при выполнении команды <tt>systemctl<br />
enable</tt>, задавая, в каких условиях должен активироваться устанавливаемый юнит.<br />
В нашем примере, служба abrtd будет активироваться при переходе в состояние<br />
<tt>multi-user.target</tt>, т.е., при каждой нормальной загрузке<sup>[4]</sup> (к &#171;ненормальным&#187; можно<br />
отнести, например, загрузки в режиме <tt>emergency.target</tt>, который является аналогом<br />
первого уровня исполнения в классической SysV).<br />
<br />
Вот и все. Мы получили минимальный рабочий service-файл systemd. Чтобы проверить<br />
его работоспособность, скопируем его в <tt>/etc/systemd/system/abrtd.service</tt>, после<br />
чего командой <tt>systemctl daemon-reload</tt> уведомим systemd об изменении<br />
конфигурации. Теперь нам остается только запустить нашу службу: <tt>systemctl start<br />
abrtd.service</tt>. Проверить состояние службы можно командой <tt>systemctl status<br />
abrtd.service</tt>, а чтобы остановить ее, нужно скомандовать <tt>systemctl stop<br />
abrtd.service</tt>. И наконец, команда <tt>systemctl enable abrtd.service</tt> выполнит<br />
установку service-файла, обеспечив его активацию при каждой загрузке (аналог<br />
<tt>chkconfig abrtd on</tt> в классическом SysV).<br />
<br />
Приведенный выше service-файл является практический точным переводом исходного<br />
init-скрипта, и он никак не использует широкий спектр возможностей,<br />
предоставляемых systemd. Ниже приведен немного улучшенный вариант этого же файла:<br />
<pre><br />
[Unit]<br />
Description=ABRT Automated Bug Reporting Tool<br />
After=syslog.target<br />
<br />
[Service]<br />
Type=dbus<br />
BusName=com.redhat.abrt<br />
ExecStart=/usr/sbin/abrtd -d -s<br />
<br />
[Install]<br />
WantedBy=multi-user.target<br />
</pre><br />
<br />
Чем же новый вариант отличается от предыдущего? Ну, прежде всего, мы уточнили<br />
описание службы. Однако, ключевым изменением является замена значения Type с <tt>forking</tt> на<br />
<tt>dbus</tt> и связанные с ней изменения: добавление имени службы в шине D-Bus<br />
(директива <tt>BusName</tt>) и задание дополнительных аргументов abrtd &#171;<tt>-d -s</tt>&#187;. Но зачем<br />
вообще нужна эта замена? Каков ее практический смысл? Чтобы ответить на этот<br />
вопрос, мы снова возвращаемся к демонизации. В ходе этой операции, процесс дважды<br />
форкается и отключается от всех терминалов. Это очень удобно при запуске демона<br />
через скрипт, но в случае использования таких продвинутых систем инициализации,<br />
как systemd, подобное поведение не дает никаких преимуществ, но вызывает<br />
неоправданные задержки. Даже если мы оставим в стороне вопрос скорости<br />
загрузки, останется такой важный аспект, как отслеживание состояния служб.<br />
systemd решает и эту задачу, контролируя работу службы и при необходимости<br />
реагируя на различные события. Например, при неожиданном падении основного<br />
процесса службы, systemd должен зарегистрировать идентификатор и код выхода<br />
процесса, также, в зависимости от настроек, он может попытаться перезапустить<br />
службу, либо активировать какой-либо заранее заданный юнит. Операция<br />
демонизации несколько затрудняет решение этих задач, так как обычно довольно<br />
сложно найти связь демонизированного процесса с исходным (собственно, смысл<br />
демонизации как раз и сводится к уничтожению этой связи) и, соответственно, для<br />
systemd сложнее определить, какой из порожденных в рамках данной службы<br />
процессов является основным. Чтобы упростить для него решение этой задачи, мы и<br />
воспользовались типом запуска dbus. Он подходит для всех служб, которые в конце<br />
процесса инициализации регистрируют свое имя на шине D-Bus<sup>[5]</sup>. ABRTd относится к<br />
ним. С новыми настройками, systemd запустит процесс abrtd, который уже не будет<br />
форкаться (согласно указанным нами ключам &#171;<tt>-d -s</tt>&#187;), и в качестве момента<br />
окончания периода запуска данной службы systemd будет рассматривать момент<br />
регистрации имени <tt>com.redhat.abrt</tt> на шине D-Bus. В этом случае основным<br />
для данной службы будет считаться процесс, непосредственно порожденный systemd.<br />
Таким образом, systemd располагает удобным методом для определения момента<br />
окончания запуска службы, а также может легко отслеживать ее состояние.<br />
<br />
Собственно, это все, что нужно было сделать. Мы получили простой<br />
конфигурационный файл, в 10 строчках которого содержится больше полезной<br />
информации, чем в 115 строках исходного init-скрипта. Добавляя в наш файл по<br />
одной строчке, мы можем использовать различные полезные функции systemd,<br />
создание аналога которых в традиционном init-скрипте потребовало бы значительных<br />
усилий. Например, добавив строку <tt>Restart=restart-always</tt>, мы приказываем<br />
systemd автоматически перезапускать службу после каждого ее падения. Или,<br />
например, добавив <tt>OOMScoreAdjust=-500</tt>, мы попросим ядро сберечь эту службу,<br />
даже если OOM Killer выйдет на тропу войны. А если мы добавим строчку<br />
<tt>CPUSchedulingPolicy=idle</tt>, процесс abrtd будет работать только в те<br />
моменты, когда система больше ничем не занята, что позволит не создавать помех<br />
для процессов, активно использующих CPU.<br />
<br />
За более подробным описанием всех опций настройки, вы можете обратиться к<br />
страницам рукводства [http://0pointer.de/public/systemd-man/systemd.unit.html systemd.unit], [http://0pointer.de/public/systemd-man/systemd.service.html systemd.service], [http://0pointer.de/public/systemd-man/systemd.exec.html systemd.exec]. Полный список доступных страниц можно просмотреть [http://0pointer.de/public/systemd-man/ здесь].<br />
<br />
Конечно, отнюдь не все init-скрипты так же легко преобразовать в service-файлы.<br />
Но, к счастью, &#171;проблемных&#187; скриптов не так уж и много.<br />
<br />
= Примечания =<br />
<br />
1. LSB-заголовок &#8212; определенная в<br />
[http://refspecs.freestandards.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/initscrcomconv.html Linux Standard Base] схема записи метаданных о службах в блоках комментариев<br />
соответствующих init-скриптов. Изначально эта схема была введена именно для<br />
того, чтобы стандартизировать init-скрипты во всех дистрибутивах. Однако<br />
разработчики многих дистрибутивов не считают нужным точно исполнять требования<br />
LSB, и поэтому формы представления метаданных в различных дистрибутивах могут<br />
отличаться. Вследствие этого, при переносе init-скрипта из одного дистрибутива в<br />
другой, скрипт приходится модифицировать. Например, демон пересылки почты при описании зависимостей может именоваться <tt>MTA</tt> или <tt>smtpdaemon</tt> (Fedora), <tt>smtp</tt> (openSUSE), <tt>mail-transport-agent</tt> (Debian и Ubuntu), <tt>mail-transfer-agent</tt>. Таким образом, можно утверждать, что стандарт LSB не справляется с поставленной задачей.<br />
<br />
2. Строго говоря, эту зависимость здесь указывать не нужно &#8212; в системах,<br />
в которых демон системного лога активируется через сокет, эта зависимость<br />
является избыточной. Современные реализации демона системного лога (например,<br />
rsyslog начиная с пятой версии) поддерживают активацию через сокет. В системах,<br />
использующих такие реализации, явное указание <tt>After=syslog.target</tt> будет<br />
избыточным, так как соответствующая функциональность поддерживается<br />
автоматически. Однако, эту строчку стоит все-таки указать для обеспечения<br />
совместимости с системами, использующими устаревшие реализации демона<br />
системного лога.<br />
<br />
3. В том контексте, в котором он используется в большинстве<br />
дистрибутивов семейства Red Hat, а именно, многопользовательский режим без<br />
запуска графической оболочки.<br />
<br />
4. Обратите внимание, что режим графической загрузки в systemd<br />
(<tt>graphical.target</tt>, аналог runlevel 5 в SysV) является надстройкой над<br />
режимом многопользовательской консольной загрузки (<tt>multi-user.target</tt>, аналог<br />
runlevel 3 в SysV). Таким образом, все службы, запускаемые в режиме<br />
<tt>multi-user.target</tt>, будут также запускаться и в режиме <tt>graphical.target</tt>.<br />
<br />
5. В настоящее время практически все службы дистрибутива Fedora после<br />
запуска регистрируется на шине D-Bus.<br />
<br />
<br />
Исходная статья: [http://0pointer.de/blog/projects/systemd-for-admins-3 systemd for Administrators, Part III: How Do I Convert A SysV Init Script Into A systemd Service File?], автор Lennart Poettering.</div>PastorDi