]>
Commit | Line | Data |
---|---|---|
5cb5a6ff LP |
1 | /*-*- Mode: C; c-basic-offset: 8 -*-*/ |
2 | ||
3 | #ifndef fooservicehfoo | |
4 | #define fooservicehfoo | |
5 | ||
6 | typedef struct Service Service; | |
7 | ||
87f0e418 | 8 | #include "unit.h" |
1e2e8133 | 9 | #include "ratelimit.h" |
5cb5a6ff LP |
10 | |
11 | typedef 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 | 30 | typedef 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 | ||
38 | typedef 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 | |
46 | typedef 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 | ||
57 | struct 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 | 86 | const UnitVTable service_vtable; |
5cb5a6ff | 87 | |
94f04347 LP |
88 | const char* service_state_to_string(ServiceState i); |
89 | ServiceState service_state_from_string(const char *s); | |
90 | ||
91 | const char* service_restart_to_string(ServiceRestart i); | |
92 | ServiceRestart service_restart_from_string(const char *s); | |
93 | ||
94 | const char* service_type_to_string(ServiceType i); | |
95 | ServiceType service_type_from_string(const char *s); | |
96 | ||
97 | const char* service_exec_command_to_string(ServiceExecCommand i); | |
98 | ServiceExecCommand service_exec_command_from_string(const char *s); | |
99 | ||
5cb5a6ff | 100 | #endif |