Bermut
@Bermut
Жертва домашней лаборатории

Как запускать while скрипт через systemd юнит?

У меня есть скрипт, который раз в 30 секунд проверяет пинг, и в случае отсутствия перезапускает виртуальную машину, раньше я его запускал в tmux руками, решил перевести в systemd юнит. При запуске его в режиме в simple скрипт не работает, в forking тоже. Какое есть решение?
Cам скрипт
#!/bin/bash
while :;do
sleep 30
    result=$(ping 10.1.100.1 | grep transmitted)
    pattern="0 received";
        if [[ $result =~ $pattern ]]; then
                qm stop 113 && qm start 113
        fi
done

Юнит, который не работает

[Unit]
Description=vm restart

[Service]
Type=simple
ExecStart=/root/vmstat.sh
PIDFile=/tmp/vmstat.pid

[Install]
WantedBy=multi-user.target

  • Вопрос задан
  • 127 просмотров
Решения вопроса 1
Bermut
@Bermut Автор вопроса
Жертва домашней лаборатории
Все работает, я забыл ограничить количество пакетов в скрипте, правильный скрипт выглядит так -
#!/bin/bash
while :;do
sleep 30
    result=$(ping 10.1.100.1 -с 4 | grep transmitted)
    pattern="0 received";
        if [[ $result =~ $pattern ]]; then
                qm stop 113 && qm start 113
        fi
done
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы