PLATFORM_IF_MATCH(linux)
PLATFORM_ELSE
PLATFORM_ENDIF
extern int error_intr;
extern int error_nomem;
diff -ru daemontools-0.76/src/svscan.c daemontools-0.76.new/src/svscan.c
--- daemontools-0.76/src/svscan.c 2001-07-12 12:49:49.000000000 -0400
+++ daemontools-0.76.new/src/svscan.c 2004-02-08 01:50:27.000000000 -0500
@@ -1,6 +1,7 @@
#include
#include
#include
+#include
#include "direntry.h"
#include "strerr.h"
#include "error.h"
@@ -14,6 +15,11 @@
#define SERVICES 1000
+#ifndef SVSCANINFO
+#define SVSCANINFO ".svscan" /* must begin with dot ('.') */
+#endif
+
+#define INFO "svscan: info: "
#define WARNING "svscan: warning: "
#define FATAL "svscan: fatal: "
@@ -38,7 +44,7 @@
int i;
const char *args[3];
- if (fn[0] == '.') return;
+ if (fn[0] == '.' && str_diff(fn,SVSCANINFO)) return;
if (stat(fn,&st) == -1) {
strerr_warn4(WARNING,"unable to stat ",fn,": ",&strerr_sys);
@@ -59,7 +65,8 @@
}
x[i].ino = st.st_ino;
x[i].dev = st.st_dev;
- x[i].pid = 0;
+ /*(fn[0]=='.' here only if SVSCANINFO; if so only supervise log/ subdir)*/
+ x[i].pid = (fn[0] != '.') ? 0 : -1;
x[i].pidlog = 0;
x[i].flaglog = 0;
@@ -190,12 +197,39 @@
}
}
+static void open_svscan_log(void)
+{
+ const int i = numx;
+ struct stat st;
+ static char fn[] = SVSCANINFO; /* avoid compiler warning on const string */
+
+ /* (semi-paranoid; could be moreso) */
+ if (fstat(STDIN_FILENO,&st) != 0 && errno == EBADF)
+ (void) open("/dev/null", O_RDONLY);
+ if (fstat(STDOUT_FILENO,&st) != 0 && errno == EBADF)
+ (void) open("/dev/null", O_WRONLY);
+ if (fstat(STDERR_FILENO,&st) != 0 && errno == EBADF)
+ (void) open("/dev/null", O_WRONLY);
+
+ if (stat(fn,&st) == 0) {
+ start(fn);
+ if (i+1 == numx && x[i].pidlog != 0) {
+ (void) dup2(x[i].pi[1], STDOUT_FILENO);
+ (void) dup2(x[i].pi[1], STDERR_FILENO);
+ strerr_warn1("",0);
+ strerr_warn2(INFO,"*** Starting svscan",0);
+ }
+ }
+}
+
int main(int argc,char **argv)
{
if (argv[0] && argv[1])
if (chdir(argv[1]) == -1)
strerr_die4sys(111,FATAL,"unable to chdir to ",argv[1],": ");
+ open_svscan_log();
+
for (;;) {
doit();
sleep(5);
]]>
:
./package/compile
test -d ${ENCAP_SOURCE} || mkdir ${ENCAP_SOURCE}
test -d ${ENCAP_SOURCE}/${ENCAP_PKGNAME} || mkdir ${ENCAP_SOURCE}/${ENCAP_PKGNAME}
test -d ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/bin || mkdir ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/bin
test -d ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/src || mkdir ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/src
test -d ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/package || mkdir ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/package
cp command/* ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/bin
cp package/run ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/package
cp package/commands ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/package
cp package/boot.inittab ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/package
cp package/boot.rclocal ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/package
cp package/run.inittab ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/package
cp package/run.rclocal ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/package
:
mkdir /usr/local/var 2>/dev/null || exit 0
mkdir /usr/local/var/svc.d 2>/dev/null || exit 0
mkdir /usr/local/var/multilog 2>/dev/null || exit 0
mkdir var 2>/dev/null || exit 0
mkdir var/encap 2>/dev/null || exit 0
touch var/encap/${ENCAP_PKGNAME}
description daemontools - a collection of tools for managing UNIX services
exclude src
exclude package