Monit 和多个操作:在 Monit 重启命令中链接命令?

Monit 和多个操作:在 Monit 重启命令中链接命令?

经过一番研究,我发现即使我能找到一些关于多个动作重新启动服务时,似乎也无法实现:

 if failed port 80 and protocol http
     then exec /home/sweet/script.pl
     and restart

在配置文件中声明服务的重启命令时monitrc,可以尝试这样的操作吗:

restart program = "perl /home/sweet/crazy-stuff.pl && /etc/init.d/server restart"

因为monit -t不要提及任何错误,所以我宁愿在做坏事之前先问一下。

答案1

您应该使用 exec 和 bash 子shell,例如:

exec "/bin/bash -c '/etc/init.d/server restart && perl /home/sweet/script.pl'"

但是,最佳实践建议对所有操作使用单个脚本(即将 init.d restart 命令包含到您的 shell 脚本中。)

答案2

这种格式怎么样

  blabla... exec "/bin/sh -c 'foo=$(mktemp) && tee $foo <<-EOF
# create the bash script then execute it

/etc/init.d/server restart
perl /home/sweet/script.pl

# and any other commands as you wish

EOF
/bin/bash $foo'"

如果你想自动删除,请附加/bin/rm $foo在后面/bin/bash $foo

...
EOF
/bin/bash $foo; /bin/rm $foo'"

相关内容