У других людей такая же проблема.См. this gist .
Когда опция daemonize активирована, Redis не проверяет, является ли процесс уже демоном (нет вызова getppid).Он систематически разветвляется, но только один раз.Это несколько необычно, для других механизмов демонизации может потребоваться начальная проверка getppid и двойной вызов fork (до и после вызова setsid), но в Linux это не обязательно.
См. этот faq для получения дополнительной информации о демонизации.
Функция Redis daemonize чрезвычайно проста:
void daemonize(void) {
int fd;
if (fork() != 0) exit(0); /* parent exits */
setsid(); /* create a new session */
/* Every output goes to /dev/null. If Redis is daemonized but
* the 'logfile' is set to 'stdout' in the configuration file
* it will not log at all. */
if ((fd = open("/dev/null", O_RDWR, 0)) != -1) {
dup2(fd, STDIN_FILENO);
dup2(fd, STDOUT_FILENO);
dup2(fd, STDERR_FILENO);
if (fd > STDERR_FILENO) close(fd);
}
}
Документация Upstart гласит:
expect daemon
Specifies that the job's main process is a daemon, and will fork twice after being run.
init(8) will follow this daemonisation, and will wait for this to occur before running
the job's post-start script or considering the job to be running.
Without this stanza init(8) is unable to supervise daemon processes and will
believe them to have stopped as soon as they daemonise on startup.
expect fork
Specifies that the job's main process will fork once after being run. init(8) will
follow this fork, and will wait for this to occur before running the job's post-start
script or considering the job to be running.
Without this stanza init(8) is unable to supervise forking processes and will believe
them to have stopped as soon as they fork on startup.
Так что я бы либодеактивируйте демонизацию на стороне Redis, либо попробуйте использовать ожидаемый форк, чем ожидаемый демон в конфигурации upstart.