Re: [systemd-devel] Shell expressions in EnvironmentFile
On Tue, Oct 7, 2014 at 8:12 PM, Jon Stanley jonstan...@gmail.com wrote: Since EnvironmentFile in a service isn't sourced by any shell, shell expressions in it will obviously not work the way that they did in a SysV style script. Nor does it seems that the environment gets preserved between ExecStartPre (where one could run a script that sets environment variables to be later used in the starting of the service) and ExecStart, so something like the following won't work: [Service] ExecStartPre=/something/that/sets/var ExecStart=/some/file $var Is there some way to get dynamically determined data into the environment such that it can be passed to the daemon at start? Dynamic arguments sound like a bad idea in general. But the easiest way to do this is by pointing ExecStart at a wrapper script which first generates exports variables, then just `exec`'s the actual daemon. -- Mantas Mikulėnas graw...@gmail.com ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel
Re: [systemd-devel] Shell expressions in EnvironmentFile
From Lennart Poettering, Wed 08 Oct 2014 at 20:48:55 (+0200) : SyslogIdentifier= should do it. It works, thanks! See systemd.exec(5) for details. When I was looking for something like that in the doc, I was confused by this passage: This option is only useful when StandardOutput= or StandardError= are set to syslog or kmsg., but it apparently actually works with StandardOutput=journal. ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel
Re: [systemd-devel] Shell expressions in EnvironmentFile
On Thu, 09.10.14 10:00, Damien Robert (damien.olivier.rob...@gmail.com) wrote: From Lennart Poettering, Wed 08 Oct 2014 at 20:48:55 (+0200) : SyslogIdentifier= should do it. It works, thanks! See systemd.exec(5) for details. When I was looking for something like that in the doc, I was confused by this passage: This option is only useful when StandardOutput= or StandardError= are set to syslog or kmsg., but it apparently actually works with StandardOutput=journal. Oh, indeed. That's a bug in the man page. Fixed now. Thanks for the pointer! Lennart -- Lennart Poettering, Red Hat ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel
Re: [systemd-devel] Shell expressions in EnvironmentFile
On Tue, 07.10.14 13:12, Jon Stanley (jonstan...@gmail.com) wrote: Since EnvironmentFile in a service isn't sourced by any shell, shell expressions in it will obviously not work the way that they did in a SysV style script. Nor does it seems that the environment gets preserved between ExecStartPre (where one could run a script that sets environment variables to be later used in the starting of the service) and ExecStart, so something like the following won't work: [Service] ExecStartPre=/something/that/sets/var ExecStart=/some/file $var Is there some way to get dynamically determined data into the environment such that it can be passed to the daemon at start? In such a case I'd suggest wrapping your daemon invocation in a shell script, setting the environment variables first, and then using exec to replace the shell process by the actual daemon process. ExecStartPre= and ExecStart= are run in separate, cleaned up execution contexts, in particular they do not inherit any environment variables between each other. Lennart -- Lennart Poettering, Red Hat ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel
Re: [systemd-devel] Shell expressions in EnvironmentFile
On Tue, 07.10.14 19:18, Simon Peeters (peeters.si...@gmail.com) wrote: 2014-10-07 19:12 GMT+02:00 Jon Stanley jonstan...@gmail.com: Since EnvironmentFile in a service isn't sourced by any shell, shell expressions in it will obviously not work the way that they did in a SysV style script. Nor does it seems that the environment gets preserved between ExecStartPre (where one could run a script that sets environment variables to be later used in the starting of the service) and ExecStart, so something like the following won't work: Which is logical since no system exists to modify the environment of the parent proces. [Service] ExecStartPre=/something/that/sets/var ExecStart=/some/file $var ExecStart=/bin/sh -c . /something/that/sets/var; /some/file $var THis would certainly work, but I'd strongly advise to use exec for executing /some/file at the end, so that the shell process is replaced by the actual daemon process, instead of continuing running with the demon process as child. Lennart -- Lennart Poettering, Red Hat ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel
Re: [systemd-devel] Shell expressions in EnvironmentFile
Lennart Poettering wrote in message 20141008094838.GB26284@gardel-login: On Tue, 07.10.14 19:18, Simon Peeters (peeters.si...@gmail.com) wrote: ExecStart=/bin/sh -c . /something/that/sets/var; /some/file $var THis would certainly work, but I'd strongly advise to use exec for executing /some/file at the end, so that the shell process is replaced by the actual daemon process, instead of continuing running with the demon process as child. I am hijacking the thread because one minor inconvenience I have with sh -c 'exec foo' is that in journalctl the logging refers to 'sh': For instance: [Unit] Description=Git backup ConditionPathIsDirectory=%h/backups/gitbackup [Service] Type=simple ExecStart=/bin/sh -c 'exec %h/mine/script/gitbackup -v save' Nice=19 IOSchedulingClass=best-effort IOSchedulingPriority=7 gives me the log: Oct 08 21:35:43 mithrim sh[9680]: [master 54c23ae] Oct 08 21:35:43 mithrim sh[9680]: 2 files changed, 3 insertions(+), 3 deletions(-) Do you know of any way to get 'gitbackup' in the log rather than 'sh'? ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel
Re: [systemd-devel] Shell expressions in EnvironmentFile
On Wed, 08.10.14 18:07, Damien Robert (damien.olivier.robert+gm...@gmail.com) wrote: Lennart Poettering wrote in message 20141008094838.GB26284@gardel-login: On Tue, 07.10.14 19:18, Simon Peeters (peeters.si...@gmail.com) wrote: ExecStart=/bin/sh -c . /something/that/sets/var; /some/file $var THis would certainly work, but I'd strongly advise to use exec for executing /some/file at the end, so that the shell process is replaced by the actual daemon process, instead of continuing running with the demon process as child. I am hijacking the thread because one minor inconvenience I have with sh -c 'exec foo' is that in journalctl the logging refers to 'sh': For instance: [Unit] Description=Git backup ConditionPathIsDirectory=%h/backups/gitbackup [Service] Type=simple ExecStart=/bin/sh -c 'exec %h/mine/script/gitbackup -v save' Nice=19 IOSchedulingClass=best-effort IOSchedulingPriority=7 gives me the log: Oct 08 21:35:43 mithrim sh[9680]: [master 54c23ae] Oct 08 21:35:43 mithrim sh[9680]: 2 files changed, 3 insertions(+), 3 deletions(-) Do you know of any way to get 'gitbackup' in the log rather than 'sh'? SyslogIdentifier= should do it. See systemd.exec(5) for details. Lennart -- Lennart Poettering, Red Hat ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel
[systemd-devel] Shell expressions in EnvironmentFile
Since EnvironmentFile in a service isn't sourced by any shell, shell expressions in it will obviously not work the way that they did in a SysV style script. Nor does it seems that the environment gets preserved between ExecStartPre (where one could run a script that sets environment variables to be later used in the starting of the service) and ExecStart, so something like the following won't work: [Service] ExecStartPre=/something/that/sets/var ExecStart=/some/file $var Is there some way to get dynamically determined data into the environment such that it can be passed to the daemon at start? ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel
Re: [systemd-devel] Shell expressions in EnvironmentFile
2014-10-07 19:12 GMT+02:00 Jon Stanley jonstan...@gmail.com: Since EnvironmentFile in a service isn't sourced by any shell, shell expressions in it will obviously not work the way that they did in a SysV style script. Nor does it seems that the environment gets preserved between ExecStartPre (where one could run a script that sets environment variables to be later used in the starting of the service) and ExecStart, so something like the following won't work: Which is logical since no system exists to modify the environment of the parent proces. [Service] ExecStartPre=/something/that/sets/var ExecStart=/some/file $var ExecStart=/bin/sh -c . /something/that/sets/var; /some/file $var in other words: If you want shell behaviour, use a shell. Is there some way to get dynamically determined data into the environment such that it can be passed to the daemon at start? Simon Peeters ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel
Re: [systemd-devel] Shell expressions in EnvironmentFile
From: Simon Peeters peeters.si...@gmail.com 2014-10-07 19:12 GMT+02:00 Jon Stanley jonstan...@gmail.com: [Service] ExecStartPre=/something/that/sets/var ExecStart=/some/file $var ExecStart=/bin/sh -c . /something/that/sets/var; /some/file $var Yeah, I think some thing like this would work: ExecStartPre=/bin/sh -c '/something/that/sets/var ; printenv /tmp/special' ExecStart=/bin/sh -c '. /tmp/special ; /some/file $var' But you probably want to reorganize how you're doing the job. You probably want a wrapper script that calculates $var and then invokes /some/file $var. Dale ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel