monit:3: 语法错误 '='

monit:3: 语法错误 '='

我正在尝试将虚拟机设置为在程序完成时关闭,以停止收费。

为此,我编写了以下 .monitrc:

SET DAEMON 30
CHECK PROCESS py MATCHING /usr/bin/python3
    start program = "sudo /bin/systemctl poweroff -i"

当我运行 monit 时,它会响应:

/home/baruch/.monitrc:3: 语法错误 '='

monit-V 响应:

监控-V

这是Monit版本5.20.0

使用 ssl、ipv6、压缩、pam 和大文件构建

操作系统:Linux instance-1 4.9.0-11-amd64 #1 SMP Debian 4.9.189-3+deb9u1 (2019-09-20) x86_64

我在我的家用计算机(Ubuntu 16.04,Monit 版本 5.16)上尝试了类似的 .monitrc,它工作正常:

SET DAEMON 30
CHECK PROCESS py MATCHING /home/baruch/datasets/Severstal/.env/bin/python3
    start program = "/bin/systemctl poweroff -i"

请帮忙。

编辑: 我需要 sudo,因为我的虚拟机的设置方式systemctl没有 sudo 就无法工作sudo(它需要一些凭据)。但是,sudo 不要求任何密码,因此可以在 .monitrc 中使用。

显然,monit 抱怨启动命令中的 sudo 没有它的路径。

我更改了 .monitrc,如下所示:

SET DAEMON 30
CHECK PROCESS py MATCHING /usr/bin/python3
start program = "/usr/bin/sudo /bin/systemctl poweroff -i"

这样 monit 不会给出任何错误消息,但也不起作用。

我尝试用日志 monit -l 运行它,日志仅包含以下内容:

[UTC 10 月 26 日 20:27:31] 信息:启动 Monit 5.20.0 守护进程

[UTC 10 月 26 日 20:27:31] 信息:“instance-1”Monit 5.20.0 开始

[UTC 10 月 26 日 20:31:01] 信息:带有 pid [1161] 的 Monit 守护进程已停止

[UTC 10 月 26 日 20:31:01] 信息:“instance-1”Monit 5.20.0 已停止

[UTC 10 月 26 日 20:31:20] 信息:启动 Monit 5.20.0 守护进程

[UTC 10 月 26 日 20:31:20] 信息:“instance-1”Monit 5.20.0 开始

[UTC 10 月 26 日 20:35:32] 信息:带有 pid [1234] 的 Monit 守护进程已停止

[UTC 10 月 26 日 20:35:32] 信息:“instance-1”Monit 5.20.0 已停止

(这里停是指我的命令monit quit。)

任何帮助将不胜感激。

答案1

编辑monitrc如下(你不需要sudo):

start program = "/bin/systemctl poweroff -i"

man monit

 By default the program is executed as the user under which Monit is
 running. If Monit is running as root, you may optionally specify the
 UID and GID the executed program should switch to.

Syntax:

 <START | STOP | RESTART> [PROGRAM] = "program"
         [[AS] UID <number | string>]
         [[AS] GID <number | string>]
         [[WITH] TIMEOUT <number> SECOND(S)]

示例(来自联机帮助页):

start program = "/usr/local/mmonit/bin/mmonit" as uid "mmonit" and gid "mmonit"

相关内容