尝试了解 monit 的启动过程

尝试了解 monit 的启动过程

我刚刚开始学习monit。在它的手册页上我发现了这个:

Monit 的行为由命令行选项和运行控制文件 ~/.monitrc 控制,我们将在后面的部分中描述其语法。命令行选项覆盖 .monitrc 声明。

当我使用以下内容创建 .monitrc 文件并对其进行测试时,它显示错误,我对其进行了更改,现在一切正常:

➜  brt_client git:(master) ✗ monit -t                    
/home/jgu/.monitrc:2: Warning: Program does not exist: 'echo'
➜  brt_client git:(master) ✗ vim ~/.monitrc              
➜  brt_client git:(master) ✗ vim ~/.monitrc
➜  brt_client git:(master) ✗ monit -t      
➜  brt_client git:(master) ✗

但当我这样做时service monit restart,我得到了这个:

➜  brt_client git:(master) ✗ service monit restart
 * Stopping daemon monitor monit                                                                                                                                                                      [ OK ] 
 * Starting daemon monitor monit                                                                                                                                                                             empty config, please edit /etc/monit/monitrc.

于是我检查了/etc/init.d/monit中的代码,发现了这个:

CONFIG="/etc/monit/monitrc"
monit_check_config () {
  # Check for emtpy config.
  if [ "`grep -s -v \"^#\" $CONFIG`" = "" ]
  then
    echo "empty config, please edit $CONFIG."
    exit 0
  fi
}

所以如果我没记错的话,这个程序不会采用 -c 或其他标志。我检查了登录/var/log/monit.log,没有显示我重新启动了它。当然,根据脚本,它只是以0退出(为什么它以0退出?)。

所以我检查了该文件,结果发现我没有读取权限/etc/monit/monitrc。因此,为 moinit 获取 sudo 权限并重试。没事。

现在真正的问题来了:

我在/etc/monit/monitrc中没有找到与“~/.monitrc”相关的任何内容,例如“include ~/.monitrc”,仅包含conf.d中的目录,monit如何知道在主目录中加载.monitrc ? (用魔法?)

假设我注销并用他的帐户登录我的计算机,这是否意味着我的配置根本不适用于他?

但这monit reload应该发生吧? (如果它没有重新加载,那么我的 ~/.monitrc 应该仍然可以运行)

答案1

用户主目录中的文件.*rc通常用于提供一些特定于用户的默认值,而系统级默认值通常在同一应用程序的*rc文件中给出。/etc

man monit应该告诉你这一点:

~/.monitrc默认运行控制文件

/etc/monitrc如果在默认位置未找到控制文件并/etc包含monitrc文件,则将使用该文件。

./monitrc如果在前两个位置均未找到控制文件,并且当前工作目录包含 monitrc 文件,则使用此文件。

但是,由于您所说的是在您的情况下,默认的运行控制文件不是,/etc/monit/monitrc/etc/monitrc可能与开发人员在手册页中编写的内容存在其他偏差(或者可能是手册页已过时,或者您的问题该文件的路径不正确)。

在作为服务运行的上下文中,monit上述内容意味着它默认将.monitrc文件保存在正在运行服务的用户的主目录中,如果找不到此类文件,它将使用/etc.

相关内容