如何从 root monit (Mac) 执行 shell 脚本

How to exec a shell script from root monit (Mac)

我已经将 Mac 的启动设置为 运行 这个监控脚本:

set daemon 60

set logfile /var/log/monit.log

check host ac_server with address 127.0.0.1
    if failed port 3000
        then exec "/bin/bash -c '/Users/liren/ac-project/monit_task.sh'"

基本上每隔 60 秒,它会在 Rails 服务器上 ping 我的 Ruby 并在服务器关闭时执行 monit_task.sh 脚本:

#!/bin/bash

cd "/Users/liren/ac-project/rails_app"
bundle exec "sidekiq -C config/sidekiq.yml" &
rails s -e production

monit 脚本位于 /usr/local/etc/monit/monitrc,由位于 /Library/LaunchDaemons/.

的 LaunchDaemon plist 执行

但是,shell 脚本不会在日志中显示任何错误的情况下执行。知道为什么吗?

尝试 运行宁:

type bundle
type rails

在您使用这些命令时找到 运行 的实际情况。然后将您发现的完整路径放入脚本中。

#!/bin/bash

cd "/Users/liren/ac-project/rails_app"
/full/path/to/bundle exec "sidekiq -C config/sidekiq.yml" &
/full/path/to/rails s -e production

您可以简单地保留当前脚本而不修改和添加完整路径,只需在 monitrc 中编辑一些小的东西(无论是 linux 还是 mac):这是我的

编辑:不要忘记 chmod +x monit_task.sh