diff --git a/src/service.c b/src/service.c index 73f1f6e3..84675956 100644 --- a/src/service.c +++ b/src/service.c @@ -2006,7 +2006,7 @@ void service_monitor(pid_t lost, int status) kill(-svc->pid, SIGKILL); /* Try removing PID file (in case service does not clean up after itself) */ - if (svc_is_daemon(svc) || svc_is_tty(svc)) { + if (svc_is_daemon(svc) || svc_is_sysv(svc) || svc_is_tty(svc)) { service_cleanup(svc); } else if (svc_is_runtask(svc)) { /* run/task should run at least once per runlevel */ @@ -2396,7 +2396,7 @@ static void svc_set_state(svc_t *svc, svc_state_t new_state) } } - if (svc_is_daemon(svc)) { + if (svc_is_daemon(svc) || svc_is_sysv(svc)) { char cond[MAX_COND_LEN]; snprintf(cond, sizeof(cond), "service/%s/", svc_ident(svc, NULL, 0)); @@ -2653,7 +2653,7 @@ restart: break; } - if (svc_is_runtask(svc)) { /* only run/task, not sysv here */ + if (svc_is_runtask(svc)) { svc_set_state(svc, SVC_STOPPING_STATE); svc->restart_tot++; svc->once++; diff --git a/src/sm.c b/src/sm.c index 0a09a9b8..7ce99f48 100644 --- a/src/sm.c +++ b/src/sm.c @@ -201,7 +201,7 @@ restart: switch (sm->state) { case SM_BOOTSTRAP_STATE: dbg("Bootstrapping all services in runlevel S from %s", finit_conf); - service_step_all(SVC_TYPE_RUNTASK | SVC_TYPE_SERVICE); + service_step_all(SVC_TYPE_RUNTASK | SVC_TYPE_SERVICE | SVC_TYPE_SYSV); sm->state = SM_BOOTSTRAP_WAIT_STATE; break; diff --git a/src/svc.h b/src/svc.h index 99d3d4bf..44947c33 100644 --- a/src/svc.h +++ b/src/svc.h @@ -52,8 +52,8 @@ typedef enum { } svc_type_t; #define SVC_TYPE_ANY (-1) -#define SVC_TYPE_RESPAWN (SVC_TYPE_SERVICE | SVC_TYPE_TTY) -#define SVC_TYPE_RUNTASK (SVC_TYPE_RUN | SVC_TYPE_TASK | SVC_TYPE_SYSV) +#define SVC_TYPE_RESPAWN (SVC_TYPE_SERVICE | SVC_TYPE_SYSV | SVC_TYPE_TTY) +#define SVC_TYPE_RUNTASK (SVC_TYPE_RUN | SVC_TYPE_TASK) typedef enum { SVC_HALTED_STATE = 0, /* Not allowed in runlevel, or not enabled. */