我刚刚开始学习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
.