2010-01-23 03:52:57 +03:00
/*-*- Mode: C; c-basic-offset: 8 -*-*/
# ifndef fooservicehfoo
# define fooservicehfoo
2010-02-03 15:03:47 +03:00
/***
This file is part of systemd .
Copyright 2010 Lennart Poettering
systemd is free software ; you can redistribute it and / or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
systemd is distributed in the hope that it will be useful , but
WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
General Public License for more details .
You should have received a copy of the GNU General Public License
along with systemd ; If not , see < http : //www.gnu.org/licenses/>.
* * */
2010-01-23 03:52:57 +03:00
typedef struct Service Service ;
2010-01-26 23:39:06 +03:00
# include "unit.h"
2010-01-29 06:42:57 +03:00
# include "ratelimit.h"
2010-01-23 03:52:57 +03:00
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 ,
2010-01-30 03:55:42 +03:00
_SERVICE_STATE_INVALID = - 1
2010-01-23 03:52:57 +03:00
} 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 ,
2010-01-30 03:55:42 +03:00
SERVICE_RESTART_ALWAYS ,
_SERVICE_RESTART_MAX ,
_SERVICE_RESTART_INVALID = - 1
2010-01-26 06:18:44 +03:00
} ServiceRestart ;
typedef enum ServiceType {
2010-01-30 03:55:42 +03:00
SERVICE_FORKING , /* forks by itself (i.e. traditional daemons) */
SERVICE_SIMPLE , /* we fork and go on right-away (i.e. modern socket activated daemons)*/
SERVICE_FINISH , /* we fork and wait until the program finishes (i.e. programs like fsck which run and need to finish before we continue) */
_SERVICE_TYPE_MAX ,
_SERVICE_TYPE_INVALID = - 1
2010-01-26 06:18:44 +03:00
} 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 ,
2010-01-30 03:55:42 +03:00
_SERVICE_EXEC_MAX ,
_SERVICE_EXEC_INVALID = - 1
2010-01-23 03:52:57 +03:00
} 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-02-15 00:43:08 +03:00
bool permissions_start_only ;
bool root_directory_start_only ;
2010-03-31 18:29:55 +04:00
bool valid_no_process ;
2010-02-15 00:43:08 +03:00
2010-01-26 06:18:44 +03:00
ServiceState state ;
2010-04-08 02:52:14 +04:00
KillMode kill_mode ;
2010-01-26 06:18:44 +03:00
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-04-06 04:43:58 +04:00
bool sysv_has_lsb : 1 ;
2010-01-26 06:18:44 +03:00
bool failure : 1 ; /* if we shut down, remember why */
2010-01-27 06:31:52 +03:00
Watch timer_watch ;
2010-01-29 06:42:57 +03:00
2010-02-14 03:09:01 +03:00
char * sysv_path ;
int sysv_start_priority ;
2010-04-07 22:27:52 +04:00
char * sysv_runlevels ;
2010-02-14 03:09:01 +03:00
2010-01-29 06:42:57 +03:00
RateLimit ratelimit ;
2010-01-23 03:52:57 +03:00
} ;
2010-02-03 16:21:48 +03:00
extern const UnitVTable service_vtable ;
2010-01-23 03:52:57 +03:00
2010-01-30 03:55:42 +03:00
const char * service_state_to_string ( ServiceState i ) ;
ServiceState service_state_from_string ( const char * s ) ;
const char * service_restart_to_string ( ServiceRestart i ) ;
ServiceRestart service_restart_from_string ( const char * s ) ;
const char * service_type_to_string ( ServiceType i ) ;
ServiceType service_type_from_string ( const char * s ) ;
const char * service_exec_command_to_string ( ServiceExecCommand i ) ;
ServiceExecCommand service_exec_command_from_string ( const char * s ) ;
2010-01-23 03:52:57 +03:00
# endif