Служба Systemd не работает с Java и Python

sed -Ee '
   :join
      $!N
      s/(\s\S+)\n(.*\1)$/ \2/
   tjoin
   P;D
'  input.txt

Пояснение:

  1. Оставьте две строки в пространстве шаблона.
  2. Попробуйте соединить строки, взглянув на последние поля двух строк в пространстве шаблонов.
  3. Повторяйте эту процедуру присоединения, пока последние поля совпадают.
  4. Затем, когда они различаются, напечатайте первую часть, которая к тому времени содержит 1-е поля всех предыдущих строк, разделенных пробелом, и общее последнее поле. Удалите эту часть, а затем вернитесь к ней.
1
15.06.2021, 08:34
1 ответ

Я подозреваю, что обе команды 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.

1
28.07.2021, 11:25

Теги

Похожие вопросы