runit

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 87465573e3b8905c7d1942bbce64a03558698cb8
parent b242b34bc71ca08444af7a5c0101dbc3e4a95bb7
Author: Gerrit Pape <pape@smarden.org>
Date:   Sat, 26 Jun 2004 14:28:11 +0000

  * runit.c, man/runit.8: if stage 1 crashes or exits 100, stage 2 will be
    skipped; if stage 2 crashes or exits 111, it will be restarted.
  * doc/runscripts.html: add, adapt various run scripts (thx).

Diffstat:
Mdoc/runit.8.html | 58+++++++++++++++++++++++++++++-----------------------------
Mdoc/runscripts.html | 20+++++++++++++++-----
Mman/runit.8 | 21+++++++++++----------
Mpackage/CHANGES | 7++++++-
Msrc/runit.c | 29+++++++++++++++--------------
5 files changed, 76 insertions(+), 59 deletions(-)

diff --git a/doc/runit.8.html b/doc/runit.8.html @@ -15,46 +15,46 @@ runit - a UNIX process no 1 <h2><a name='sect2'>Description</a></h2> <b>runit</b> must be run as Unix process no 1. It performs the system&rsquo;s booting, running, and shutdown -in three Stages: +in three stages: <h2><a name='sect3'>Stage 1</a></h2> <b>runit</b> runs <i>/etc/runit/1</i> and waits for it to terminate. The system&rsquo;s one time tasks are done here. <i>/etc/runit/1</i> has full control of <i>/dev/console</i> to be able to start an emergency shell if the one time -initialization tasks fail. If <i>/etc/runit/1</i> itself crashes, <b>runit</b> will skip -stage 2 and enter stage 3. +initialization tasks fail. If <i>/etc/runit/1</i> crashes, or exits 100, <b>runit</b> +will skip stage 2 and enter stage 3. <h2><a name='sect4'>Stage 2</a></h2> -<b>runit</b> runs <i>/etc/runit/2</i>, which should -not return until system shutdown; if it crashes, it will be restarted. Normally -<i>/etc/runit/2</i> starts <i><b>runsvdir</b>(8)</i>. <b>runit</b> is able to handle the ctrl-alt-del -keyboard request in Stage 2, see below. +<b>runit</b> runs <i>/etc/runit/2</i>, which +should not return until system shutdown; if it crashes, or exits 111, it +will be restarted. Normally <i>/etc/runit/2</i> starts <i><b>runsvdir</b>(8)</i>. <b>runit</b> is able +to handle the ctrl-alt-del keyboard request in stage 2, see below. <h2><a name='sect5'>Stage 3</a></h2> -If <b>runit</b> is told to shutdown -the system, or the Stage 2 returns without errors, it terminates Stage -2 if it is running, and runs <i>/etc/runit/3</i>. The systems tasks to shutdown -and halt or reboot are done here. If Stage 3 returns, <b>runit</b> checks if the -file <i>/etc/runit/reboot</i> exists and has the execute by owner permission set. -If so, the system is rebooted, it&rsquo;s halted otherwise. +If +<b>runit</b> is told to shutdown the system, or stage 2 returns, it terminates +stage 2 if it is running, and runs <i>/etc/runit/3</i>. The systems tasks to shutdown +and possibly halt or reboot the system are done here. If stage 3 returns, +<b>runit</b> checks if the file <i>/etc/runit/reboot</i> exists and has the execute by +owner permission set. If so, the system is rebooted, it&rsquo;s halted otherwise. + <h2><a name='sect6'>Ctrl-alt-del</a></h2> -If <b>runit</b> -receives the ctrl-alt-del keyboard request and the file <i>/etc/runit/ctrlaltdel</i> -exists and has the execute by owner permission set, <b>runit</b> runs <i>/etc/runit/ctrlaltdel</i>, -waits for it to terminate, and then sends itself a CONT signal. +If <b>runit</b> receives the ctrl-alt-del keyboard request and the file +<i>/etc/runit/ctrlaltdel</i> exists and has the execute by owner permission set, +<b>runit</b> runs <i>/etc/runit/ctrlaltdel</i>, waits for it to terminate, and then sends +itself a CONT signal. <h2><a name='sect7'>Signals</a></h2> -<b>runit</b> -only accepts signals in Stage 2. <p> -If <b>runit</b> receives a CONT signal and the -file <i>/etc/runit/stopit</i> exists and has the execute by owner permission set, -<b>runit</b> is told to shutdown the system. <p> -if <b>runit</b> receives an INT signal, a -ctrl-alt-del keyboard request is triggered. +<b>runit</b> only accepts signals in stage 2. <p> +If <b>runit</b> +receives a CONT signal and the file <i>/etc/runit/stopit</i> exists and has the +execute by owner permission set, <b>runit</b> is told to shutdown the system. <p> +if +<b>runit</b> receives an INT signal, a ctrl-alt-del keyboard request is triggered. + <h2><a name='sect8'>See Also</a></h2> -<i>runit-init(8)</i>, <i>runsvdir(8)</i>, -<i>runsvchdir(8)</i>, <i>utmpset(8)</i>, <i>runsv(8)</i>, <i>runsvctrl(8)</i>, <i>runsvstat(8)</i>, <i>chpst(8)</i>, -<i>svlogd(8)</i>, <i>svwaitdown(8)</i>, <i>svwaitup(8)</i> <p> +<i>runit-init(8)</i>, <i>runsvdir(8)</i>, <i>runsvchdir(8)</i>, <i>utmpset(8)</i>, <i>runsv(8)</i>, +<i>runsvctrl(8)</i>, <i>runsvstat(8)</i>, <i>chpst(8)</i>, <i>svlogd(8)</i>, <i>svwaitdown(8)</i>, <i>svwaitup(8)</i> +<p> <i>http://smarden.org/runit/</i> <h2><a name='sect9'>Author</a></h2> -Gerrit -Pape &lt;pape@smarden.org&gt; <p> +Gerrit Pape &lt;pape@smarden.org&gt; <p> <hr><p> <a name='toc'><b>Table of Contents</b></a><p> diff --git a/doc/runscripts.html b/doc/runscripts.html @@ -22,7 +22,7 @@ Thanks go to the following people for contributing run scripts: Alessandro Bono, Robin S. Socha, Claus Alboege, Paul Jarc, clemens fischer, Jesse Cablek, Lukas Beeler, Thomas Baden, Ralf Hildebrandt, Antonio Dias, Erich Schubert, Lang Martin, Tomasz Nidecki, Marek Bartnikowski, -Thomas Schwinge, Gael Canal, Woon Wai Keen, Richard A Downing. +Thomas Schwinge, Gael Canal, Woon Wai Keen, Richard A Downing, Phil Genera. <hr> <a href="#atftpd">atftpd</a><br> <a href="#apache">apache</a><br> @@ -325,13 +325,20 @@ to be set up. </pre> The <a href="index.html">runit</a> package does not care about utmp records for getties. You should choose a getty that handles its own utmp and wtmp -records. Debian's <tt>mingetty</tt> does create his own utmp record. +records. +Debian's <tt>mingetty</tt> creates its own utmp record. <h3>An <tt>agetty</tt> run script</h3> (<i>Slackware Linux 9.0</i>) <pre> #!/bin/sh exec /sbin/agetty 38400 tty1 linux </pre> +<h3>A <tt>fgetty</tt> run script</h3> +(<i>Linux</i>) +<pre> + #!/bin/sh + exec chpst -P fgetty tty4 +</pre> <hr> <h3><a name="gpm">A <tt>gpm</tt> run script</a></h3> (<i>LFS</i>) @@ -542,12 +549,15 @@ to be set up. </pre> <hr> <h3><a name="postgresql">A <tt>postgresql</tt> run script</a></h3> -(<i>SunOS</i>) +(<i>Debian</i>, <i>SunOS</i>) <pre> #!/bin/sh - exec setuidgid postgres /pack/postgresql/current/bin/postmaster \ - -D /pack/postgresql/data 2&gt;&amp;1 + exec setuidgid postgres /usr/lib/postgresql/bin/postmaster \ + -D /var/lib/postgres/data 2&gt;&amp;1 </pre> +This service needs a +<a href="http://cr.yp.to/daemontools/faq/create.html#runlog">log service</a> +to be set up. <hr> <h3><a name="ppp">A <tt>ppp</tt> run script</a></h3> (<i>FreeBSD</i>) diff --git a/man/runit.8 b/man/runit.8 @@ -6,7 +6,7 @@ runit \- a UNIX process no 1 .SH DESCRIPTION .B runit must be run as Unix process no 1. -It performs the system's booting, running, and shutdown in three Stages: +It performs the system's booting, running, and shutdown in three stages: .SH STAGE 1 .B runit runs @@ -19,29 +19,30 @@ has full control of to be able to start an emergency shell if the one time initialization tasks fail. If .I /etc/runit/1 -itself crashes, +crashes, or exits 100, .B runit will skip stage 2 and enter stage 3. .SH STAGE 2 .B runit runs .IR /etc/runit/2 , -which should not return until system shutdown; if it crashes, it will be -restarted. +which should not return until system shutdown; if it crashes, or exits 111, +it will be restarted. Normally .I /etc/runit/2 starts .BR runsvdir (8). .B runit -is able to handle the ctrl-alt-del keyboard request in Stage 2, see below. +is able to handle the ctrl-alt-del keyboard request in stage 2, see below. .SH STAGE 3 If .B runit -is told to shutdown the system, or the Stage 2 returns without errors, it -terminates Stage 2 if it is running, and runs +is told to shutdown the system, or stage 2 returns, it terminates stage 2 if +it is running, and runs .IR /etc/runit/3 . -The systems tasks to shutdown and halt or reboot are done here. -If Stage 3 returns, +The systems tasks to shutdown and possibly halt or reboot the system are +done here. +If stage 3 returns, .B runit checks if the file .I /etc/runit/reboot @@ -59,7 +60,7 @@ runs waits for it to terminate, and then sends itself a CONT signal. .SH SIGNALS .B runit -only accepts signals in Stage 2. +only accepts signals in stage 2. .P If .B runit diff --git a/package/CHANGES b/package/CHANGES @@ -1,4 +1,9 @@ - * chpst.c: new option -/ chroot. +runit 1.0.3 +Sat, 26 Jun 2004 14:23:30 +0000 + * chpst.c, man/chpst.8: new option -/ chroot. + * runit.c, man/runit.8: if stage 1 crashes or exits 100, stage 2 will be + skipped; if stage 2 crashes or exits 111, it will be restarted. + * doc/runscripts.html: add, adapt various run scripts (thx). runit 1.0.2 Mon, 29 Mar 2004 17:52:50 +0000 diff --git a/src/runit.c b/src/runit.c @@ -168,27 +168,28 @@ int main (int argc, const char * const *argv, char * const *envp) { if (child == pid) { if (wait_exitcode(wstat) != 0) { - if (wait_crashed(wstat)) { + if (wait_crashed(wstat)) strerr_warn3(WARNING, "child crashed: ", stage[st], 0); - if (st == 0) { - /* this is stage 1 */ + else + strerr_warn3(WARNING, "child failed: ", stage[st], 0); + if (st == 0) + /* this is stage 1 */ + if (wait_crashed(wstat) || (wait_exitcode(wstat) == 100)) { strerr_warn3(INFO, "leave stage: ", stage[st], 0); strerr_warn2(WARNING, "skipping stage 2...", 0); st++; break; } - } - else - strerr_warn3(WARNING, "child failed: ", stage[st], 0); - if (st == 1) { + if (st == 1) /* this is stage 2 */ - strerr_warn2(WARNING, "killing all processes in stage 2...", 0); - kill(-pid, 9); - sleep(5); - strerr_warn2(WARNING, "restarting.", 0); - st--; - break; - } + if (wait_crashed(wstat) || (wait_exitcode(wstat) == 111)) { + strerr_warn2(WARNING, "killing all processes in stage 2...", 0); + kill(-pid, 9); + sleep(5); + strerr_warn2(WARNING, "restarting.", 0); + st--; + break; + } } strerr_warn3(INFO, "leave stage: ", stage[st], 0); break;