]> git.ipfire.org Git - thirdparty/systemd.git/blame - service.h
core: add minimal templating system
[thirdparty/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,
80876c20 36 SERVICE_EXITED, /* Nothing is running anymore, but ValidNoProcess is true, ehnce this is OK */
5cb5a6ff 37 SERVICE_RELOAD,
034c6ed7
LP
38 SERVICE_STOP, /* No STOP_PRE state, instead just register multiple STOP executables */
39 SERVICE_STOP_SIGTERM,
40 SERVICE_STOP_SIGKILL,
5cb5a6ff 41 SERVICE_STOP_POST,
034c6ed7
LP
42 SERVICE_FINAL_SIGTERM, /* In case the STOP_POST executable hangs, we shoot that down, too */
43 SERVICE_FINAL_SIGKILL,
5cb5a6ff 44 SERVICE_MAINTAINANCE,
034c6ed7 45 SERVICE_AUTO_RESTART,
5cb5a6ff 46 _SERVICE_STATE_MAX,
94f04347 47 _SERVICE_STATE_INVALID = -1
5cb5a6ff
LP
48} ServiceState;
49
034c6ed7 50typedef enum ServiceRestart {
5cb5a6ff 51 SERVICE_ONCE,
034c6ed7 52 SERVICE_RESTART_ON_SUCCESS,
94f04347
LP
53 SERVICE_RESTART_ALWAYS,
54 _SERVICE_RESTART_MAX,
55 _SERVICE_RESTART_INVALID = -1
034c6ed7
LP
56} ServiceRestart;
57
58typedef enum ServiceType {
94f04347
LP
59 SERVICE_FORKING, /* forks by itself (i.e. traditional daemons) */
60 SERVICE_SIMPLE, /* we fork and go on right-away (i.e. modern socket activated daemons)*/
61 SERVICE_FINISH, /* we fork and wait until the program finishes (i.e. programs like fsck which run and need to finish before we continue) */
62 _SERVICE_TYPE_MAX,
63 _SERVICE_TYPE_INVALID = -1
034c6ed7 64} ServiceType;
5cb5a6ff
LP
65
66typedef enum ServiceExecCommand {
67 SERVICE_EXEC_START_PRE,
68 SERVICE_EXEC_START,
69 SERVICE_EXEC_START_POST,
5cb5a6ff 70 SERVICE_EXEC_RELOAD,
5cb5a6ff
LP
71 SERVICE_EXEC_STOP,
72 SERVICE_EXEC_STOP_POST,
e537352b
LP
73 _SERVICE_EXEC_COMMAND_MAX,
74 _SERVICE_EXEC_COMMAND_INVALID = -1
5cb5a6ff
LP
75} ServiceExecCommand;
76
77struct Service {
78 Meta meta;
79
034c6ed7
LP
80 ServiceType type;
81 ServiceRestart restart;
82
83 /* If set we'll read the main daemon PID from this file */
84 char *pid_file;
85
86 usec_t restart_usec;
87 usec_t timeout_usec;
5cb5a6ff 88
e537352b 89 ExecCommand* exec_command[_SERVICE_EXEC_COMMAND_MAX];
5cb5a6ff
LP
90 ExecContext exec_context;
91
81a2b7ce
LP
92 bool permissions_start_only;
93 bool root_directory_start_only;
8e274523 94 bool valid_no_process;
81a2b7ce 95
034c6ed7
LP
96 ServiceState state;
97
50159e6a
LP
98 KillMode kill_mode;
99
034c6ed7
LP
100 ExecStatus main_exec_status;
101
102 ExecCommand *control_command;
103 pid_t main_pid, control_pid;
104 bool main_pid_known:1;
5cb5a6ff 105
034c6ed7 106 bool failure:1; /* if we shut down, remember why */
1e2e8133 107
e537352b 108 bool sysv_has_lsb:1;
2c4104f0
LP
109 char *sysv_path;
110 int sysv_start_priority;
8309400a 111 char *sysv_runlevels;
2c4104f0 112
1e2e8133 113 RateLimit ratelimit;
e537352b
LP
114
115 Watch timer_watch;
5cb5a6ff
LP
116};
117
47be870b 118extern const UnitVTable service_vtable;
5cb5a6ff 119
94f04347
LP
120const char* service_state_to_string(ServiceState i);
121ServiceState service_state_from_string(const char *s);
122
123const char* service_restart_to_string(ServiceRestart i);
124ServiceRestart service_restart_from_string(const char *s);
125
126const char* service_type_to_string(ServiceType i);
127ServiceType service_type_from_string(const char *s);
128
129const char* service_exec_command_to_string(ServiceExecCommand i);
130ServiceExecCommand service_exec_command_from_string(const char *s);
131
5cb5a6ff 132#endif