]> git.ipfire.org Git - people/ms/systemd.git/blame - service.h
load-fragment: prefer unit id over alias names when looking for fragments
[people/ms/systemd.git] / service.h
CommitLineData
5cb5a6ff
LP
1/*-*- Mode: C; c-basic-offset: 8 -*-*/
2
3#ifndef fooservicehfoo
4#define fooservicehfoo
5
a7334b09
LP
6/***
7 This file is part of systemd.
8
9 Copyright 2010 Lennart Poettering
10
11 systemd is free software; you can redistribute it and/or modify it
12 under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 2 of the License, or
14 (at your option) any later version.
15
16 systemd is distributed in the hope that it will be useful, but
17 WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 General Public License for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with systemd; If not, see <http://www.gnu.org/licenses/>.
23***/
24
5cb5a6ff
LP
25typedef struct Service Service;
26
87f0e418 27#include "unit.h"
1e2e8133 28#include "ratelimit.h"
5cb5a6ff
LP
29
30typedef enum ServiceState {
31 SERVICE_DEAD,
32 SERVICE_START_PRE,
33 SERVICE_START,
34 SERVICE_START_POST,
35 SERVICE_RUNNING,
5cb5a6ff 36 SERVICE_RELOAD,
034c6ed7
LP
37 SERVICE_STOP, /* No STOP_PRE state, instead just register multiple STOP executables */
38 SERVICE_STOP_SIGTERM,
39 SERVICE_STOP_SIGKILL,
5cb5a6ff 40 SERVICE_STOP_POST,
034c6ed7
LP
41 SERVICE_FINAL_SIGTERM, /* In case the STOP_POST executable hangs, we shoot that down, too */
42 SERVICE_FINAL_SIGKILL,
5cb5a6ff 43 SERVICE_MAINTAINANCE,
034c6ed7 44 SERVICE_AUTO_RESTART,
5cb5a6ff 45 _SERVICE_STATE_MAX,
94f04347 46 _SERVICE_STATE_INVALID = -1
5cb5a6ff
LP
47} ServiceState;
48
034c6ed7 49typedef enum ServiceRestart {
5cb5a6ff 50 SERVICE_ONCE,
034c6ed7 51 SERVICE_RESTART_ON_SUCCESS,
94f04347
LP
52 SERVICE_RESTART_ALWAYS,
53 _SERVICE_RESTART_MAX,
54 _SERVICE_RESTART_INVALID = -1
034c6ed7
LP
55} ServiceRestart;
56
57typedef enum ServiceType {
94f04347
LP
58 SERVICE_FORKING, /* forks by itself (i.e. traditional daemons) */
59 SERVICE_SIMPLE, /* we fork and go on right-away (i.e. modern socket activated daemons)*/
60 SERVICE_FINISH, /* we fork and wait until the program finishes (i.e. programs like fsck which run and need to finish before we continue) */
61 _SERVICE_TYPE_MAX,
62 _SERVICE_TYPE_INVALID = -1
034c6ed7 63} ServiceType;
5cb5a6ff
LP
64
65typedef enum ServiceExecCommand {
66 SERVICE_EXEC_START_PRE,
67 SERVICE_EXEC_START,
68 SERVICE_EXEC_START_POST,
5cb5a6ff 69 SERVICE_EXEC_RELOAD,
5cb5a6ff
LP
70 SERVICE_EXEC_STOP,
71 SERVICE_EXEC_STOP_POST,
94f04347
LP
72 _SERVICE_EXEC_MAX,
73 _SERVICE_EXEC_INVALID = -1
5cb5a6ff
LP
74} ServiceExecCommand;
75
76struct Service {
77 Meta meta;
78
034c6ed7
LP
79 ServiceType type;
80 ServiceRestart restart;
81
82 /* If set we'll read the main daemon PID from this file */
83 char *pid_file;
84
85 usec_t restart_usec;
86 usec_t timeout_usec;
5cb5a6ff
LP
87
88 ExecCommand* exec_command[_SERVICE_EXEC_MAX];
89 ExecContext exec_context;
90
034c6ed7
LP
91 ServiceState state;
92
93 ExecStatus main_exec_status;
94
95 ExecCommand *control_command;
96 pid_t main_pid, control_pid;
97 bool main_pid_known:1;
5cb5a6ff 98
034c6ed7 99 bool failure:1; /* if we shut down, remember why */
acbb0225 100 Watch timer_watch;
1e2e8133
LP
101
102 RateLimit ratelimit;
5cb5a6ff
LP
103};
104
47be870b 105extern const UnitVTable service_vtable;
5cb5a6ff 106
94f04347
LP
107const char* service_state_to_string(ServiceState i);
108ServiceState service_state_from_string(const char *s);
109
110const char* service_restart_to_string(ServiceRestart i);
111ServiceRestart service_restart_from_string(const char *s);
112
113const char* service_type_to_string(ServiceType i);
114ServiceType service_type_from_string(const char *s);
115
116const char* service_exec_command_to_string(ServiceExecCommand i);
117ServiceExecCommand service_exec_command_from_string(const char *s);
118
5cb5a6ff 119#endif