I suspect both ExecStart= commands will be started simultaneously. There is nothing in man systemd.service or man systemd.exec to suggest that it will wait for one to exit before the other starts or it will wait for one to be in some steady internal state before starting the other.
In fact, man systemd.service explicitly says this about ExecStartPre= and ExecStartPost=:
Syntax is the same as for ExecStart=, except that multiple command lines are allowed and the commands are executed one after the other.
ExecStart= does say multiple commands are allowed with Type=oneshot but does not say that one will be executed after the other.
If you want Lavalink.jar to exit before starting launcher.service the answer is simple: Use ExecStartPre= instead of ExecStart= for Lavalink.jar.
Otherwise, if launcher.py depends on Lavalink.jar and they are long-running services, then it might be a better idea to split them into seperate services like so:
# lavalink.service
[Service]
ExecStart=/usr/bin/java -jar /usr/java/Lavalink.jar
# launcher.service
[Unit]
After=lavalink.service
Requires=lavalink.service
[Service]
ExecStartPre=/bin/sleep 10
ExecStart=/usr/bin/python3 /home/launcher.py
[Install]
WantedBy=multi-user.target
I don't normally like sleep because on a slow-day, your second service might start too early, and on a fast-day, your second service isn't starting as soon as possible.
A better solution would be if Lavalink.jar implemented the watchdog. Then you could use Type=watchdog in lavalink.service. That would cause launcher.service to start only after the watchdog starts receiving a heartbaeat from lavalink.service. This would be a nice replacement for ExecStartPre=/bin/sleep.
journalctlshow any useful information? (journalctl -u bot.serviceto filter its output). What doessystemctl status bot.servicesay?man systemd.serviceorman systemd.execto suggest that it will wait for one to exit before the other starts or it will wait for one to be in some steady internal state before starting the other. Iflauncher.pydepends onLavalink.jar, then it might be a better idea to split them into seperate services with anAfter=and perhapsRequires=relationship. IfLavalink.jarimplementswatchdog, then this gets easy. Otherwise, you might want anExecStartPre=sleep ...for thelauncher.pyservice.