systemd.service systemd Developer Lennart Poettering lennart@poettering.net systemd.service 5 systemd.service systemd service configuration files systemd.service Description A unit configuration file whose name ends in .service encodes information about a process controlled and supervised by systemd. This man page lists the configuration options specific to this unit type. See systemd.unit5 for the common options of all unit configuration files. The common configuration items are configured in the generic [Unit] and [Install] sections. The service specific configuration options are configured in the [Service] section. Additional options are listed in systemd.exec5, which define the execution environment the commands are executed in. Unless DefaultDependencies= is set to , service units will implicitly have dependencies of type Requires= and After= on basic.target as well as dependencies of type Conflicts= and Before= on shutdown.target. These ensure that normal service units pull in basic system initialization, and are terminated cleanly prior to system shutdown. Only services involved with early boot or late system shutdown should disable this option. If a service is requested under a certain name but no unit configuration file is found, systemd looks for a SysV init script by the same name (with the .service suffix removed) and dynamically creates a service unit from that script. This is useful for compatibility with SysV. Options Service files must include a [Service] section, which carries information about the service and the process it supervises. A number of options that may be used in this section are shared with other unit types. These options are documented in systemd.exec5. The options specific to the [Service] section of service units are the following: Type= Configures the process start-up type for this service unit. One of , , , , . If set to (the default value) it is expected that the process configured with ExecStart= is the main process of the service. In this mode, if the process offers functionality to other processes on the system its communication channels should be installed before the daemon is started up (e.g. sockets set up by systemd, via socket activation), as systemd will immediately proceed starting follow-up units. If set to it is expected that the process configured with ExecStart= will call fork() as part of its start-up. The parent process is expected to exit when start-up is complete and all communication channels set up. The child continues to run as the main daemon process. This is the behaviour of traditional UNIX daemons. If this setting is used, it is recommended to also use the PIDFile= option, so that systemd can identify the main process of the daemon. systemd will proceed starting follow-up units as soon as the parent process exits. Behaviour of is similar to , however it is expected that the process has to exit before systemd starts follow-up units. RemainAfterExit= is particularly useful for this type of service. Behaviour of is similar to , however it is expected that the daemon acquires a name on the D-Bus bus, as configured by BusName=. systemd will proceed starting follow-up units after the D-Bus bus name has been acquired. Service units with this option configured implicitly gain dependencies on the dbus.target unit. Behaviour of is similar to , however it is expected that the daemon sends a notification message via sd_notify3 or an equivalent call when it finished starting up. systemd will proceed starting follow-up units after this notification message has been sent. If this option is used NotifyAccess= (see below) should be set to open access to the notification socket provided by systemd. If NotifyAccess= is not set, it will implicitly be set to . RemainAfterExit= Takes a boolean value that specifies whether the service shall be considered active even when all its processes exited. Defaults to . PIDFile= Takes an absolute file name pointing to the PID file of this daemon. Use of this option is recommended for services where Type= is set to . BusName= Takes a D-Bus bus name, where this service is reachable as. This option is mandatory for services where Type= is set to , but its use is otherwise recommended as well if the process takes a name on the D-Bus bus. ExecStart= Takes a command line that is executed when this service shall be started up. The first token of the command line must be an absolute file name, then followed by arguments for the process. It is mandatory to set this option for all services. This option may not be specified more than once, except when Type=oneshot is used in which case more than one ExecStart= line is accepted which are then invoked one by one, sequentially in the order they appear in the unit file. Optionally, if the absolute file name is prefixed with @, the second token will be passed as argv[0] to the executed process, followed by the further arguments specified. If the first token is prefixed with - an exit code of the command normally considered a failure (i.e. non-zero exit status or abormal exit due to signal) is ignored and considered success. If both - and @ are used for the same command the former must preceed the latter. Unless Type=forking is set, the process started via this command line will be considered the main process of the daemon. The command line accepts % specifiers as described in systemd.unit5. On top of that basic environment variable substitution is supported, where ${FOO} is replaced by the string value of the environment variable of the same name. Also $FOO may appear as separate word on the command line in which case the variable is replaced by its value split at whitespaces. Note that the first argument (i.e. the binary to execute) may not be a variable, and must be a literal and absolute path name. ExecStartPre= ExecStartPost= Additional commands that are executed before (resp. after) the command in ExecStart=. Multiple command lines may be concatenated in a single directive, by separating them by semicolons (these semicolons must be passed as separate words). In that case, the commands are executed one after the other, serially. Alternatively, these directives may be specified more than once whith the same effect. However, the latter syntax is not recommended for compatibility with parsers suitable for XDG .desktop files. Use of these settings is optional. Specifier and environment variable substitution is supported. ExecReload= Commands to execute to trigger a configuration reload in the service. This argument takes multiple command lines, following the same scheme as pointed out for ExecStartPre= above. Use of this setting is optional. Specifier and environment variable substitution is supported here following the same scheme as for ExecStart=. One special environment variable is set: if known $MAINPID is set to the main process of the daemon, and may be used for command lines like the following: /bin/kill -HUP $(MAINPID). ExecStop= Commands to execute to stop the service started via ExecStart=. This argument takes multiple command lines, following the same scheme as pointed out for ExecStartPre= above. Use of this setting is optional. All processes remaining for a service after the commands configured in this option are run are terminated according to the KillMode= setting (see below). If this option is not specified the process is terminated right-away when service stop is requested. Specifier and environment variable substitution is supported (including $(MAINPID), see above). ExecStopPost= Additional commands that are executed after the service was stopped using the commands configured in ExecStop=. This argument takes multiple command lines, following the same scheme as pointed out for ExecStartPre. Use of these settings is optional. Specifier and environment variable substitution is supported. RestartSec= Configures the time to sleep before restarting a service (as configured with Restart=). Takes a unit-less value in seconds, or a time span value such as "5min 20s". Defaults to 100ms. TimeoutSec= Configures the time to wait for start-up and stop. If a daemon service does not signal start-up completion within the configured time the service will be considered failed and be shut down again. If a service is asked to stop but does not terminate in the specified time it will be terminated forcibly via SIGTERM, and after another delay of this time with SIGKILL. (See KillMode= below.) Takes a unit-less value in seconds, or a time span value such as "5min 20s". Pass 0 to disable the timeout logic. Defaults to 60s. Restart= Configures whether the main service process shall be restarted when it exists. Takes one of , or . If set to (the default) the service will not be restarted when it exits. If set to it will be restarted only when it exited cleanly, i.e. terminated with an exit code of 0. If set to the service will be restarted regardless whether it exited cleanly or not, or got terminated abnormally by a signal. PermissionsStartOnly= Takes a boolean argument. If true, the permission related execution options as configured with User= and similar options (see systemd.exec5 for more information) are only applied to the process started with ExecStart=, and not to the various other ExecStartPre=, ExecStartPost=, ExecReload=, ExecStop=, ExecStopPost= commands. If false, the setting is applied to all configured commands the same way. Defaults to false. RootDirectoryStartOnly= Takes a boolean argument. If true, the root directory as configured with the RootDirectory= option (see systemd.exec5 for more information) is only applied to the process started with ExecStart=, and not to the various other ExecStartPre=, ExecStartPost=, ExecReload=, ExecStop=, ExecStopPost= commands. If false, the setting is applied to all configured commands the same way. Defaults to false. SysVStartPriority= Set the SysV start priority to use to order this service in relation to SysV services lacking LSB headers. This option is only necessary to fix ordering in relation to legacy SysV services, that have no ordering information encoded in the script headers. As such it should only be used as temporary compatibility option, and not be used in new unit files. Almost always it is a better choice to add explicit ordering directives via After= or Before=, instead. For more details see systemd.unit5. If used, pass an integer value in the range 0-99. KillMode= Specifies how processes of this service shall be killed. One of , , , . If set to all remaining processes in the control group of this service will be terminated on service stop, after the stop command (as configured with ExecStop=) is executed. If set to only the members of the process group of the main service process are killed. If set to only the main process itself is killed. If set to no process is killed. In this case only the stop command will be executed on service stop, but no process be killed otherwise. Processes remaining alive after stop are left in their control group and the control group continues to exist after stop unless it is empty. Defaults to . Processes will first be terminated via SIGTERM. If then after a delay (configured via the TimeoutSec= option) processes still remain, the termination request is repeated with the SIGKILL signal. See kill2 for more information. NonBlocking= Set O_NONBLOCK flag for all file descriptors passed via socket-based activation. If true, all file descriptors >= 3 (i.e. all except STDIN/STDOUT/STDERR) will have the O_NONBLOCK flag set and hence are in non-blocking mode. This option is only useful in conjunction with a socket unit, as described in systemd.socket5. Defaults to false. NotifyAccess= Controls access to the service status notification socket, as accessible via the sd_notify3 call. Takes one of (the default), or . If no daemon status updates are accepted by the service processes, all status update messages are ignored. If only service updates sent from the main process of the service are accepted. If all services updates from all members of the service's control group are accepted. This option must be set to open access to the notification socket when using Type=notify (see above). Sockets= Specifies the name of the socket units this service shall inherit the sockets from when the service (ignoring the different suffix of course) is started. Normally it should not be necessary to use this setting as all sockets whose unit shares the same name as the service are passed to the spawned process. Note that the same socket may be passed to multiple processes at the same time. Also note that a different service may be activated on incoming traffic than inherits the sockets. Or in other words: The Service= setting of .socket units doesn't have to match the inverse of the Sockets= setting of the .service it refers to. See Also systemd1, systemctl8, systemd.unit5, systemd.exec5