2010-01-23 03:52:57 +03:00
/*-*- Mode: C; c-basic-offset: 8 -*-*/
# ifndef fooservicehfoo
# define fooservicehfoo
typedef struct Service Service ;
# include "name.h"
typedef enum ServiceState {
SERVICE_DEAD ,
SERVICE_START_PRE ,
SERVICE_START ,
SERVICE_START_POST ,
SERVICE_RUNNING ,
SERVICE_RELOAD ,
2010-01-26 06:18:44 +03:00
SERVICE_STOP , /* No STOP_PRE state, instead just register multiple STOP executables */
SERVICE_STOP_SIGTERM ,
SERVICE_STOP_SIGKILL ,
2010-01-23 03:52:57 +03:00
SERVICE_STOP_POST ,
2010-01-26 06:18:44 +03:00
SERVICE_FINAL_SIGTERM , /* In case the STOP_POST executable hangs, we shoot that down, too */
SERVICE_FINAL_SIGKILL ,
2010-01-23 03:52:57 +03:00
SERVICE_MAINTAINANCE ,
2010-01-26 06:18:44 +03:00
SERVICE_AUTO_RESTART ,
2010-01-23 03:52:57 +03:00
_SERVICE_STATE_MAX ,
} ServiceState ;
2010-01-26 06:18:44 +03:00
typedef enum ServiceRestart {
2010-01-23 03:52:57 +03:00
SERVICE_ONCE ,
2010-01-26 06:18:44 +03:00
SERVICE_RESTART_ON_SUCCESS ,
SERVICE_RESTART_ALWAYS
} ServiceRestart ;
typedef enum ServiceType {
SERVICE_FORKING ,
SERVICE_SIMPLE
} ServiceType ;
2010-01-23 03:52:57 +03:00
typedef enum ServiceExecCommand {
SERVICE_EXEC_START_PRE ,
SERVICE_EXEC_START ,
SERVICE_EXEC_START_POST ,
SERVICE_EXEC_RELOAD ,
SERVICE_EXEC_STOP ,
SERVICE_EXEC_STOP_POST ,
_SERVICE_EXEC_MAX
} ServiceExecCommand ;
struct Service {
Meta meta ;
2010-01-26 06:18:44 +03:00
ServiceType type ;
ServiceRestart restart ;
/* If set we'll read the main daemon PID from this file */
char * pid_file ;
usec_t restart_usec ;
usec_t timeout_usec ;
2010-01-23 03:52:57 +03:00
ExecCommand * exec_command [ _SERVICE_EXEC_MAX ] ;
ExecContext exec_context ;
2010-01-26 06:18:44 +03:00
ServiceState state ;
ExecStatus main_exec_status ;
ExecCommand * control_command ;
pid_t main_pid , control_pid ;
bool main_pid_known : 1 ;
2010-01-23 03:52:57 +03:00
2010-01-26 06:18:44 +03:00
bool failure : 1 ; /* if we shut down, remember why */
int timer_id ;
2010-01-23 03:52:57 +03:00
} ;
const NameVTable service_vtable ;
# endif