]> git.ipfire.org Git - people/ms/systemd.git/blame - service.h
execute: typo fix
[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,
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 59 SERVICE_FORKING, /* forks by itself (i.e. traditional daemons) */
05e343b7 60 SERVICE_SIMPLE, /* we fork and go on right-away (i.e. modern socket activated daemons) */
94f04347 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) */
05e343b7 62 SERVICE_DBUS, /* we fork and wait until a specific D-Bus name appears on the bus */
94f04347
LP
63 _SERVICE_TYPE_MAX,
64 _SERVICE_TYPE_INVALID = -1
034c6ed7 65} ServiceType;
5cb5a6ff
LP
66
67typedef enum ServiceExecCommand {
68 SERVICE_EXEC_START_PRE,
69 SERVICE_EXEC_START,
70 SERVICE_EXEC_START_POST,
5cb5a6ff 71 SERVICE_EXEC_RELOAD,
5cb5a6ff
LP
72 SERVICE_EXEC_STOP,
73 SERVICE_EXEC_STOP_POST,
e537352b
LP
74 _SERVICE_EXEC_COMMAND_MAX,
75 _SERVICE_EXEC_COMMAND_INVALID = -1
5cb5a6ff
LP
76} ServiceExecCommand;
77
78struct Service {
79 Meta meta;
80
034c6ed7
LP
81 ServiceType type;
82 ServiceRestart restart;
83
84 /* If set we'll read the main daemon PID from this file */
85 char *pid_file;
86
87 usec_t restart_usec;
88 usec_t timeout_usec;
5cb5a6ff 89
e537352b 90 ExecCommand* exec_command[_SERVICE_EXEC_COMMAND_MAX];
5cb5a6ff
LP
91 ExecContext exec_context;
92
81a2b7ce
LP
93 bool permissions_start_only;
94 bool root_directory_start_only;
8e274523 95 bool valid_no_process;
81a2b7ce 96
a16e1123 97 ServiceState state, deserialized_state;
034c6ed7 98
50159e6a
LP
99 KillMode kill_mode;
100
034c6ed7
LP
101 ExecStatus main_exec_status;
102
103 ExecCommand *control_command;
a16e1123 104 ServiceExecCommand control_command_id;
034c6ed7
LP
105 pid_t main_pid, control_pid;
106 bool main_pid_known:1;
5cb5a6ff 107
05e343b7
LP
108 /* If we shut down, remember why */
109 bool failure:1;
110
111 bool bus_name_good:1;
1e2e8133 112
701cc384
LP
113 bool got_socket_fd:1;
114
e537352b 115 bool sysv_has_lsb:1;
2c4104f0
LP
116 char *sysv_path;
117 int sysv_start_priority;
8309400a 118 char *sysv_runlevels;
2c4104f0 119
05e343b7
LP
120 char *bus_name;
121
1e2e8133 122 RateLimit ratelimit;
e537352b 123
4f2d528d
LP
124 int socket_fd;
125
e537352b 126 Watch timer_watch;
5cb5a6ff
LP
127};
128
47be870b 129extern const UnitVTable service_vtable;
5cb5a6ff 130
4f2d528d
LP
131int service_set_socket_fd(Service *s, int fd);
132
94f04347
LP
133const char* service_state_to_string(ServiceState i);
134ServiceState service_state_from_string(const char *s);
135
136const char* service_restart_to_string(ServiceRestart i);
137ServiceRestart service_restart_from_string(const char *s);
138
139const char* service_type_to_string(ServiceType i);
140ServiceType service_type_from_string(const char *s);
141
142const char* service_exec_command_to_string(ServiceExecCommand i);
143ServiceExecCommand service_exec_command_from_string(const char *s);
144
5cb5a6ff 145#endif