On 05/26/2015 11:12 PM, Steven Noonan wrote: > Hi there, > > I'm wondering what the functional difference is between doing: > > ExecStartPre=/bin/foo > ExecStart=/bin/bar > > and > > ExecStart=/bin/foo > ExecStart=/bin/bar > > From my read of the systemd.service man page, they appear to have the > same behavior in the common use case.
Three differences come directly to mind: - If you have unit of type that is NOT oneshot (simple, forking, etc.), you can have only a single ExecStart= line, not multiple ones. The main service process must be started in ExecStart= and not ExecStartPre=. - Even in Type=oneshot units you must have at least one ExecStart= line (but can in any case have an arbitrary amount of ExecStartPre= lines, even zero). - If you set PermissionsStartOnly= or RootDirectoryStartOnly=, then certain settings will be applied to ExecStart= but not to ExecStartPre= (see manpage for details). (There are probably more.) Generally speaking, I follow the following guidelines when writing units: - Type=oneshot: I typically use only ExecStart= and only use ExecStartPre= if I have to use *StartOnly=true (see above). - other types: ExecStart= to start the service proper, ExecStartPre= for preparatory things (like generating a default config if none is already present or something along those lines) But it really depends on your use case and as always YMMV. Hope that helps! Christian _______________________________________________ systemd-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/systemd-devel
