Я пытаюсь настроить monit для отключения моей виртуальной машины, когда моя программа завершена. (Программа работает как демон, занимает много времени, о котором я заранее не знаю, и моя машина дорогая, поэтому я хочу сэкономить.)

Я создал следующий .monitrc в моем домашнем каталоге:

set daemon 60
set logfile /run/monit.log
set httpd unixsocket /run/monit.socket
    allow baruch:monit
check process python3 matching python3
      start program = "sudo systemctl poweroff"

Я создал файл журнала и файл сокета и сделал их доступными для записи.

Все- monit monitor all выдает две ошибки:

/home/baruch/.monitrc:6: Программа не существует: 'sudo'

Unix сокет /run/monit.socket ошибка соединения - соединение отказано

Любая помощь будет оценена.

1 ответ1

0

Поскольку я не получил ответов, я пришел к выводу, что, к сожалению, monit не очень хорошо поддерживается сообществом и, возможно, не так уж и много использовал.

Я придумал следующий скрипт bash, который служит моей цели:

#!/bin/bash
while :
do
if ps -C python3 &> /dev/null
then :
else
sudo systemctl poweroff
fi
sleep 60
done

Здесь : это неоперация, которая возвращает истину,

while :
do
...
done

это бесконечный цикл, python3 - это программа, которую я отслеживаю, ps -C python3 - это команда, которая возвращает true, если python3 работает (возможно, с любыми параметрами), и false в противном случае, &> /dev/null отбрасывает вывод этой команды ( в противном случае он печатается каждую минуту в терминале), sudo systemctl poweroff отключает мой компьютер, sleep 60 переводит скрипт в спящий режим на 1 минуту.

Я поместил этот код в файл, назвал его monitor , сделал его исполняемым и запустил его следующим образом:

./monitor & disown

Здесь & запускает скрипт в фоновом режиме, а disown позволяет скрипту продолжать работу даже после закрытия терминала, с которого я его запустил.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .