summary refs log tree commit diff
diff options
context:
space:
mode:
authorGerrit Pape <pape@smarden.org>2004-06-26 14:28:11 +0000
committerGerrit Pape <pape@smarden.org>2004-06-26 14:28:11 +0000
commite9ce8c0fb2b079e1d4662f3b425a6556e26fa9db (patch)
tree3defeb8c4c4e861bde360483f0b262a946811d2d
parent8608a4e8a500a4b0e334ddcabe2d4bbcfc8f0ea2 (diff)
downloadrunit-e9ce8c0fb2b079e1d4662f3b425a6556e26fa9db.tar.gz
runit-e9ce8c0fb2b079e1d4662f3b425a6556e26fa9db.tar.xz
runit-e9ce8c0fb2b079e1d4662f3b425a6556e26fa9db.zip
* 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).
-rw-r--r--doc/runit.8.html58
-rw-r--r--doc/runscripts.html20
-rw-r--r--man/runit.821
-rw-r--r--package/CHANGES7
-rw-r--r--src/runit.c29
5 files changed, 76 insertions, 59 deletions
diff --git a/doc/runit.8.html b/doc/runit.8.html
index 5d9abb9..4d6119a 100644
--- 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
index 708f5cc..9ee0c40 100644
--- 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
index 4461065..d26d3ec 100644
--- 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
index 015c184..658d278 100644
--- 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
index 3882e50..3386155 100644
--- 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;