остановка демона mate-notification-daemon, тайм-аут уведомлений Mate

Ответ @GracefulRestart является лучшим, если у вас есть только одна служба в зависимости от доступности базы данных. Однако, если у вас есть несколько служб, для которых есть это требование, создайте одноразовую службу, чтобы все службы могли иметь зависимость Requires=от:

/etc/systemd/system/portopen@.service

[Unit]
Description=Checks database availability on %I
After=network.target
Requires=network.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/path/to/portopen.sh %I

[Install]
WantedBy=default.target

/путь/к/portopen.sh

#!/bin/bash
dbhost=${1:-localhost}
dbport=${2:-5678}
maxtries=${3:-5}
wait=${4:-10}
tries=1

# Check communication to database
while ! [ 2>/dev/null : < /dev/tcp/$dbhost/$dbport ]; do
   echo "Unable to connect to database on $dbhost TCP/$dbport (attempt $tries): retrying in $wait seconds" >&2
   (( tries++ ))
   if [[ $tries -le $maxtries ]]; then
      sleep $wait
   else
      echo "Unable to connect to database on $dbhost TCP/$dbport: aborting"
      exit 1
   fi
done

Я сделал скрипт немного более гибким на тот случай, если вы измените или добавите серверы баз данных, или измените порт, или захотите изменить количество повторных попыток на -уровне обслуживания. Если вам это не нужно, просто позвоните в сервис portopen.serviceи удалите части %I.

Допустим, ваш сервер базы данных находится на foobarи ваше приложение базы данных работает на foobarapp.service. Внесите следующие изменения вfoobarapp.service:

# systemctl edit foobarapp.service

[в редакторе]

[Unit]
After=portopen@foobar.service
Requires=portopen@foobar.service

Затем перезагрузите systemdи запустите и включите проверку:

# systemctl daemon-reload
# systemctl enable portopen@foobar.service

Затем вы можете перезапустить foobarapp.serviceв любое время. Он должен запускаться только в случае успешного возврата portopen@foobar.service.

Если служба приложений базы данных еще не существует, foobarapp.serviceона будет выглядеть следующим образом:

/etc/systemd/system/foobarapp.service

[Unit]
Description=Foobar database application
# Add any other dependencies here
After=portopen@foobar.service
Requires=portopen@foobar.service

[Service]
# If it is a daemon, use "forking" instead
Type=simple
ExecStart=/path/to/exec

[Install]
WantedBy=default.target
0
10.03.2020, 14:47
0 ответов

Теги

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