Running systemd service synchronously / in foreground
4
votes
1
answer
6229
views
I would like to replace my Xsession with my custom program (kiosk-like setup), previously I was just setting
STARTUP
variable in my .xsessionrc
file like:
STARTUP='/path/to/my/program'
Now I want to wrap my program as a systemd service to utilize some systemd features like journal logging, configurable automatic restarts, etc. As with previous setup I would prefer to avoid to run 3rd-party session and window managers, but I still have to run something to keep session active, so I've used:
STARTUP='systemd-run --user --scope /path/to/my/program'
However it's still not a convenient systemd unit and finally I've ended up with:
STARTUP='systemd-run --user --scope --unit my-session sleep inf'
and defined a service unit for my program to run:
[Unit]
Description=My service
BindsTo=my-session.scope
Requisite=my-session.scope
After=my-session.scope
[Service]
Type=exec
ExecStart=/path/to/my/program
Restart=always
[Install]
WantedBy=my-session.scope
In general this setup works like a charm however relying on scope name that is generated on the fly seems clunky for me and moreover sometimes it's required to do implicit cleanup on session restart like:
systemctl reset-failed my.service my-session.scope
because systemd
complains that my-session.scope
already exists.
So, I'm looking for a way to run systemd service synchronously as systemd-run --scope
does but same time re-using existing unit file and not generating one on the fly.
P.S.: I've tried following approach but it doesnt work correctly (interrupting systemctl doesnt interrupt the service managed):
systemctl start --wait my-session.target
Asked by reddot
(296 rep)
Jun 26, 2020, 01:15 PM
Last activity: Jun 28, 2020, 07:25 PM
Last activity: Jun 28, 2020, 07:25 PM