6 ms·
I'm not the same author, but I run several Webapps in systemd units, with the below service for all of them: Note the @ in the name, that means I reuse it as w
by Spidler 11y ago
I'm not the same author, but I run several Webapps in systemd units, with the below service for all of them:
Note the @ in the name, that means I reuse it as webapp@api.domain.name webapp@frontend.domain.name and so on.
----8<---- webapp@.service ---->8----
[Unit]
Description=%i webapp
[Service]
User=%i
Group=%i
# Note that the first argument of the command line (i.e. the program to execute)
# may not include % specifiers.
ExecStart=/srv/webapp %i
WorkingDirectory=/srv/%i/
PrivateTmp=true
Type=simple
Restart=always
RestartSec=2s
[Install]
WantedBy=multi-user.target
---- 8< ----
/srv/webapp is a simple script that will do "exec $1/webapp" which is the actual executable.
- simoncion 11y ago> /srv/webapp is a simple script that will do "exec $1/webapp" I'm not trying to start a fight. Why do you call out to a script, rather than having systemd make the call on its own?
- JdeBP 11y agoIt's for the same reason that java has to be invoked as /usr/bin/env $JAVA_HOME/bin/java thus raising questions such as http://unix.stackexchange.com/questions/229523/ http://unix.stackexchange.com/questions/229523/ . systemd does not permit variable expansions or unit parameters in the first word of ExecStart.
- simoncion 11y agoAssuming that your explanation applies to Spidler's situation, why not do ExecStart=/bin/sh -c "%i/webapp" rather than using a one-off wrapper? Does that wrapper ship with systemd?