0

Is it possible to create a service that depends on several other services? What is the right syntax?

Such as:

[Unit]
Description=service description
Wants=network.target
After=network.target
After=syslog.target

[Service]
User=bootapp
ExecStart=/var/app/app.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

The goal is to start a service automatically after OS reboot and make sure that logging and networking services are started prior to the service.

Additional question: Do I need to specify Restart?

1

The unit file you posted looks fine. But the unit as you defined it here has no strict dependencies, only weak (Wants= instead of Requires=). That means if network.target is not there or if it fails to start, this unit would be started anyway. After= (and Before=) is used only for ordering, not for dependency management. So if your app needs another service, use Requires=. If it needs that service before it can be started itself, use After= additionally.

To enable your unit to start automatically after booting, you have to enable it. Systemd needs to know where to link it for starting, that's what WantedBy= in the [Install] section is used for. After editing the unit file and saving it in /etc/systemd/system/my-unit.service you have to reload the systemd daemon to have it pick up the new unit, before you can enable it; the command is systemctl daemon-reload. To enable the unit type systemctl enable my-unit.service. This adds a symlink in /etc/systemd/system/multi-user.target.wants/ to your unit file.

To start it manually you can type systemctl start my-unit.service.

Restart= is only needed if you want your app to be automatically restarted, when it exited. There are different possibilities for when to restart, like on-failure or always (more in the man page of systemd.service).

Also your app.jar needs to be executable for this to work. If it is and it starts your app, then it's fine. I think a jar must be started by sth. like java -jar app.jar, but ofc. I could be wrong here.

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.