sed -Ee '
:join
$!N
s/(\s\S+)\n(.*\1)$/ \2/
tjoin
P;D
' input.txt
Пояснение:
Я подозреваю, что обе команды ExecStart=
будут запущены одновременно. Вman systemd.service
илиman systemd.exec
нет ничего, что указывало бы на то, что он будет ждать выхода одного перед тем, как запустится другой, или он будет ждать, пока один из них перейдет в какое-то устойчивое внутреннее состояние, прежде чем запускать другой.
На самом деле, man systemd.service
явно говорит это о ExecStartPre=
и 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=
говорит, что с Type=oneshot
разрешено несколько команд, но не говорит, что одна будет выполняться после другой.
Если вы хотите Lavalink.jar
выйти перед запуском launcher.service
, ответ прост. :Используйте ExecStartPre=
вместо ExecStart=
для Lavalink.jar
.
В противном случае, если launcher.py
зависит от Lavalink.jar
и они являются долго -работающими службами, возможно, было бы лучше разделить их на отдельные службы, например:
# 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
Обычно мне не нравится sleep
, потому что в медленный -день вторая служба может начаться слишком рано, а в быстрый -день вторая служба не запустится как можно скорее.
Лучшее решение было бы, если бы Lavalink.jar
реализовал сторожевой таймер. Затем вы можете использовать Type=watchdog
в lavalink.service
. Это приведет к тому, что launcher.service
запустится только после того, как сторожевой таймер начнет получать сигналы сердцебиения от lavalink.service
. Это было бы хорошей заменой ExecStartPre=/bin/sleep
.