代码之家  ›  专栏  ›  技术社区  ›  Liren Yeo

如何从根monit(mac)执行shell脚本

  •  0
  • Liren Yeo  · 技术社区  · 6 年前

    我已设置Mac的launchd以运行此monit脚本:

    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秒,它就会ping我的ruby on rails服务器并执行 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/ 是的。

    但是,如果不在日志中显示任何错误,就无法执行shell脚本。知道为什么吗?

    2 回复  |  直到 6 年前
        1
  •  0
  •   Mark Setchell    6 年前

    尝试运行:

    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
    
        2
  •  0
  •   Viktova    6 年前

    您只需保留当前脚本,而不必修改和添加完整路径,只需在monitrc中编辑一些小的内容(不管是linux还是mac):这是我的 answer

    编辑:别忘了 chmod+x monit_task.sh命令