在 Monit 中调用 exec 时,没有任何反应,尽管日志中一切正常

问题描述 投票:0回答:1

我在 Ubuntu 22.04.3 LTS 上有 Monit 5.31.0,我很难理解为什么 exec 不起作用。

我有一个网站的监控文件,例如:

check host all with address google.com
group test
if failed url https://google.com with content = 'nothing' for 2 cycles
then exec "/home/ubuntu/bot/run_shell.sh"

这故意触发错误(用于测试)并应执行脚本 /home/ubuntu/bot/run_shell.sh

脚本内容很简单: (我试图最大限度地简化脚本 - “echo 123”结果是一样的)

#!/usr/bin/env bash
/usr/bin/python3.11 /home/ubuntu/bot/my_bot.py

如果我在控制台中手动运行脚本:

./run_shell.sh 或者 /home/ubuntu/bot/run_shell.sh 一切正常并且脚本运行。

在监控日志中:

[2023-08-11T16:56:45+0300] info     : Reinitializing monit daemon
[2023-08-11T16:56:45+0300] info     : Reinitializing Monit -- control file '/etc/monit/monitrc'
[2023-08-11T16:56:45+0300] info     : Monit reloaded
[2023-08-11T16:56:45+0300] warning  : 'all' failed protocol test [HTTP] at [google.com]:443/ [TCP/IP TLS] -- Network is unreachable
[2023-08-11T16:57:15+0300] error    : 'all' failed protocol test [HTTP] at [google.com]:443/ [TCP/IP TLS] -- Network is unreachable
[2023-08-11T16:57:15+0300] info     : 'all' exec: '/home/ubuntu/bot/run_shell.sh'

我在日志中看到行 'all' exec: '/home/ubuntu/bot/run_shell.sh',但脚本没有被执行。

我也尝试添加 exec "/bin/bash /home/ubuntu/bot/run_shell.sh" 但仍然不起作用。

您能帮我找出问题所在吗?

我尝试过的:

在控制台中使用 ./run_shell.sh 和 /home/ubuntu/bot/run_shell.sh 手动运行脚本,效果符合预期。 使用 Monit 配置中提供的原始执行行。 修改 exec 行以显式调用 Bash 解释器。 预期结果:

我期望Monit配置中的exec行能够触发/home/ubuntu/bot/run_shell.sh的执行,从而导致Python脚本成功执行。

实际结果:

尽管在日志中看到 'all' exec: '/home/ubuntu/bot/run_shell.sh' 行,但该脚本在由 Monit 触发时不会执行。

任何有关如何解决此问题的见解或建议将不胜感激。预先感谢您的协助!

monit
1个回答
0
投票

因为

exec
没有保存输出,您是否确保脚本真的没有执行?例如,在第一行写一些东西,比如

#!/usr/bin/env bash
touch /tmp/monit-is-writing-this-file-yay

/usr/bin/python3.11 /home/ubuntu/bot/my_bot.py

由于 monit 不会记录执行脚本时出现的问题,因此问题源应该位于您的脚本内部。一个可能的问题(根据设计)是,monit 不提供环境!因此,如果 python 或您的机器人依赖于 ENV 提供的任何内容,您必须在脚本中手动设置它,例如

#!/usr/bin/env bash

# manually set env
export PYTHON_WHATEVER="yes, please"
export MYBOT_DATABASE="postgresql://user:pass@host:port/db"


# and/or write env to be able to check it:
env > /tmp/my_bot.env


/usr/bin/python3.11 /home/ubuntu/bot/my_bot.py

PS:如果您的脚本具有

+x
标志和正确的 shebang(它有!),它将毫无问题地执行。无需手动设置解释器,所以
exec "/home/ubuntu/bot/run_shell.sh"
就是正确的方法。

© www.soinside.com 2019 - 2024. All rights reserved.