Монит, чтобы выключить машину, когда программа завершена

224
Baruch Youssin

Я пытаюсь настроить 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 ошибка соединения - соединение отказано

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

0

1 ответ на вопрос

0
Baruch Youssin

Поскольку я не получил ответов, я пришел к выводу, что, к сожалению, 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является команда, которая возвращает истину, если python3работает (возможно, с любыми параметрами) и ложь в противном случае, &> /dev/nullотбрасывает вывод этой команды ( в противном случае он печатается каждую минуту в терминале), sudo systemctl poweroffявляется команда, которая выключает мой компьютер, sleep 60переводит скрипт в спящий режим на 1 минуту.

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

./monitor & disown 

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

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