#include #include #include #include #include void run(void) { int pid; while ((pid = fork()) == -1) sleep(1800); if (!pid) { char * const av[4] = {"sh", "-c", "./myscript.rb >& log.`date '+%m%d-%H%M'`", NULL}; execv("/bin/sh", av); exit(1); } while (waitpid(pid, 0, 0) == -1 && errno == EINTR); } int main(void) { int pid = fork(); if (pid > 0) return 0; close(0); close(1); close(2); setsid(); for (;;) { run(); int fd; fd = open("delay", O_RDONLY); if (fd == -1) { sleep(10*3600); continue; } int delay = 0; char c; while (read(fd, &c, 1) == 1) { if (c < '0' || c > '9') break; delay *= 10; delay += c - '0'; } close(fd); sleep(delay); } return 0; }