<div dir="ltr"><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Feb 26, 2022 at 7:05 PM Tom Browder <<a href="mailto:tom.browder@gmail.com" target="_blank">tom.browder@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div>On Sat, Feb 26, 2022 at 09:38 Dave Howorth <<a href="mailto:systemd@howorth.org.uk" target="_blank">systemd@howorth.org.uk</a>> wrote:<br></div></div><div><div><div class="gmail_quote"></div></div></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Sat, 26 Feb 2022 09:17:38 -0600<br>
Tom Browder <<a href="mailto:tom.browder@gmail.com" target="_blank">tom.browder@gmail.com</a>> wrote:<br>
> Is there any way to get a plain syntax check of a potential new<br>
> service file?<br>
<br>
systemd-analyze verify FILE...</blockquote><div dir="auto"><br></div></div><div><div dir="auto">Thanks, Dave.</div><div dir="auto"><br></div><div dir="auto">I'm apparently having problems with the executable file and I'm not sure if I need</div><div dir="auto">the Type to be simple or oneshot.</div><div dir="auto"><br></div><div dir="auto">The service I'm trying to create is to emulate a user at the CLI executing a script running in the foreground who never logs out.</div><div dir="auto"><br></div><div dir="auto">The script loops infinitely listening and responding to a specific port behind an apache reverse proxy. The script is programmed to stop with a Ctr-C. It can be left with "nohup &" (but I'm not sure if that interferes with its design yet).</div></div></blockquote><div><br></div><div></div><div>Right, that's basically how all services work. (It's not really something I would call "emulating a user" – that just feels backwards. It's more like *the user* with 'nohup' is emulating a service manager here...)</div><div><br></div><div>If the service remains running in foreground, it's Type=simple. (Services which go into background, i.e. have a 'daemonize' function, would be Type=forking.)<br></div><div><br></div><div>Type=oneshot is for "one-shot" tasks which do something relatively quick and exit; for example, if another unit had "After=an-oneshot.service", it would wait until that service *exits,* rather than until it's "started". It's not suitable for actual long-running services like yours – if you tried to use Type=oneshot, systemd would think your service was "starting" forever.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div dir="auto"><br></div><div dir="auto">I do know I have to set an environment variable for the executable to find its libraries, and I'm not sure how to do that in the service file to emulate this:</div><div dir="auto"><br></div><div dir="auto">    export MYLIB=/path/to/lib; /path/to/prog</div><div dir="auto"><br></div><div dir="auto">I have tried both Type=oneshot and Type=simple but neither like the single ExecStart= line with that command.</div></div></blockquote><div><br></div><div>Neither of them invoke /bin/sh to parse the command – the *shell* is what normally would interpret the "export ..." in a shell script, but that doesn't happen in systemd services. In all cases, ExecStart is minimally parsed by systemd itself and then just directly execve()'d.<br></div><div><br></div><div>Use the Environment= option to set environment variables.</div></div><br>-- <br><div dir="ltr"><div dir="ltr">Mantas Mikulėnas</div></div></div>