我正在尝试设置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
由于我没有收到任何答复,我得出的结论是,不幸的是,monit
它没有得到社区的很好支持,而且可能没有得到广泛使用。
我想出了以下可以满足我目的的 bash 脚本:
#!/bin/bash
while :
do
if ps -C python3 &> /dev/null
then :
else
sudo systemctl poweroff
fi
sleep 60
done
这:
是一个返回 true 的无操作,
while :
do
...
done
是一个无限循环,python3
是我正在监控的程序,ps -C python3
是一个如果python3
正在运行(可能带有任何参数)则返回 true 否则返回 false 的命令,&> /dev/null
丢弃此命令的输出(否则它会每分钟在终端上打印一次),sudo systemctl poweroff
是关闭我的计算机的命令,sleep 60
让脚本休眠 1 分钟。
我把这段代码放在一个文件中,将其命名为monitor
,使其可执行并按如下方式运行它:
./monitor & disown
这里&
在后台运行脚本,并disown
允许脚本在我启动脚本的终端关闭后继续运行。