]> git.ipfire.org Git - thirdparty/systemd.git/blame - service.h
Merge remote branch 'kay/master'
[thirdparty/systemd.git] / service.h
CommitLineData
5cb5a6ff
LP
1/*-*- Mode: C; c-basic-offset: 8 -*-*/
2
3#ifndef fooservicehfoo
4#define fooservicehfoo
5
6typedef struct Service Service;
7
87f0e418 8#include "unit.h"
1e2e8133 9#include "ratelimit.h"
5cb5a6ff
LP
10
11typedef enum ServiceState {
12 SERVICE_DEAD,
13 SERVICE_START_PRE,
14 SERVICE_START,
15 SERVICE_START_POST,
16 SERVICE_RUNNING,
5cb5a6ff 17 SERVICE_RELOAD,
034c6ed7
LP
18 SERVICE_STOP, /* No STOP_PRE state, instead just register multiple STOP executables */
19 SERVICE_STOP_SIGTERM,
20 SERVICE_STOP_SIGKILL,
5cb5a6ff 21 SERVICE_STOP_POST,
034c6ed7
LP
22 SERVICE_FINAL_SIGTERM, /* In case the STOP_POST executable hangs, we shoot that down, too */
23 SERVICE_FINAL_SIGKILL,
5cb5a6ff 24 SERVICE_MAINTAINANCE,
034c6ed7 25 SERVICE_AUTO_RESTART,
5cb5a6ff 26 _SERVICE_STATE_MAX,
94f04347 27 _SERVICE_STATE_INVALID = -1
5cb5a6ff
LP
28} ServiceState;
29
034c6ed7 30typedef enum ServiceRestart {
5cb5a6ff 31 SERVICE_ONCE,
034c6ed7 32 SERVICE_RESTART_ON_SUCCESS,
94f04347
LP
33 SERVICE_RESTART_ALWAYS,
34 _SERVICE_RESTART_MAX,
35 _SERVICE_RESTART_INVALID = -1
034c6ed7
LP
36} ServiceRestart;
37
38typedef enum ServiceType {
94f04347
LP
39 SERVICE_FORKING, /* forks by itself (i.e. traditional daemons) */
40 SERVICE_SIMPLE, /* we fork and go on right-away (i.e. modern socket activated daemons)*/
41 SERVICE_FINISH, /* we fork and wait until the program finishes (i.e. programs like fsck which run and need to finish before we continue) */
42 _SERVICE_TYPE_MAX,
43 _SERVICE_TYPE_INVALID = -1
034c6ed7 44} ServiceType;
5cb5a6ff
LP
45
46typedef enum ServiceExecCommand {
47 SERVICE_EXEC_START_PRE,
48 SERVICE_EXEC_START,
49 SERVICE_EXEC_START_POST,
5cb5a6ff 50 SERVICE_EXEC_RELOAD,
5cb5a6ff
LP
51 SERVICE_EXEC_STOP,
52 SERVICE_EXEC_STOP_POST,
94f04347
LP
53 _SERVICE_EXEC_MAX,
54 _SERVICE_EXEC_INVALID = -1
5cb5a6ff
LP
55} ServiceExecCommand;
56
57struct Service {
58 Meta meta;
59
034c6ed7
LP
60 ServiceType type;
61 ServiceRestart restart;
62
63 /* If set we'll read the main daemon PID from this file */
64 char *pid_file;
65
66 usec_t restart_usec;
67 usec_t timeout_usec;
5cb5a6ff
LP
68
69 ExecCommand* exec_command[_SERVICE_EXEC_MAX];
70 ExecContext exec_context;
71
034c6ed7
LP
72 ServiceState state;
73
74 ExecStatus main_exec_status;
75
76 ExecCommand *control_command;
77 pid_t main_pid, control_pid;
78 bool main_pid_known:1;
5cb5a6ff 79
034c6ed7 80 bool failure:1; /* if we shut down, remember why */
acbb0225 81 Watch timer_watch;
1e2e8133
LP
82
83 RateLimit ratelimit;
5cb5a6ff
LP
84};
85
87f0e418 86const UnitVTable service_vtable;
5cb5a6ff 87
94f04347
LP
88const char* service_state_to_string(ServiceState i);
89ServiceState service_state_from_string(const char *s);
90
91const char* service_restart_to_string(ServiceRestart i);
92ServiceRestart service_restart_from_string(const char *s);
93
94const char* service_type_to_string(ServiceType i);
95ServiceType service_type_from_string(const char *s);
96
97const char* service_exec_command_to_string(ServiceExecCommand i);
98ServiceExecCommand service_exec_command_from_string(const char *s);
99
5cb5a6ff 100#endif