我正在我的一些 Linux 服务器上设置 Nagios,但遇到了一些问题。该check_ide_smart插件需要对系统的 root 访问权限才能运行。要运行它,我使用该check_by_ssh插件通过 ssh 进入远程主机上的 nagios 帐户,然后check_ide_smart使用 sudo运行。
我最初添加了以下几行/etc/sudoers以允许程序工作:
nagios ALL=NOPASSWD: /usr/lib/nagios/plugins/check_ide_smart
Run Code Online (Sandbox Code Playgroud)
虽然这在本地运行时效果很好,但当它从 Nagios 运行时我遇到了一个问题:没有生成 TTY,这阻止了插件工作。
我在 sudo 的手册页中找到了 -s 选项,它生成一个 shell 并在那里执行程序。当我尝试使用 时sudo -s,我遇到了权限问题,因为 -s 显然将命令更改为/bin/bash -c /usr/lib/nagios/plugins/check_ide_smart,这是 sudoers 文件所不允许的。我尝试更改 sudoers 文件以使用该命令,但这不起作用,并且使用引号是语法错误。
我最终通过在以下行中使用它来使其工作/etc/sudoers:
nagios ALL=/bin/bash
Run Code Online (Sandbox Code Playgroud)
这对我来说真的是错误的,因为我允许 nagios 用户生成一个 root shell,他们可以用它做任何事情。
在这一点上,我认为也许,通过将命令放在 nagios 用户具有只读权限的 shell 脚本中会起作用,所以我创建了一个 shell 脚本:
#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin $@
Run Code Online (Sandbox Code Playgroud)
不幸的是,我永远无法获得传递的参数 ( 编辑:我需要引用$@) 以正确使用插件,所以我不知道这是否可行。$@它才能工作。感谢@derobert 和@pjz。我仍然不知道它是否会起作用,因为我使用@Mike …
我有一台 Linux 机器,它没有在软件方面运行太多,但不知何故使用了 2GB 已安装内存中的 1.7GB。当我自由奔跑时,我得到:
total used free shared buffers cached
Mem: 2072616 1979972 92644 0 164876 129740
-/+ buffers/cache: 1685356 387260
Swap: 498004 1632 496372
Run Code Online (Sandbox Code Playgroud)
当我运行时top,我得到与第一行相同的数字free(由于内存使用现已自行修复,因此无法重现)。
但是,当我运行 时ps aux,所有进程的内存使用量仅为 295.9MB,这与 free 报告的 1.7GB 内存使用情况相差甚远。
为什么会有这样的差异?
编辑:
这是请求的额外信息,但我认为它不会有太大帮助,因为我现在已经显示使用了 ~360MB 使用free和 ~300MB 使用使用来自ps aux. 不知道为什么问题会自行解决。
free
total used free shared buffers cached
Mem: 2072616 668484 1404132 0 185868 139196
-/+ buffers/cache: 343420 1729196
Swap: 498004 1632 496372
Run Code Online (Sandbox Code Playgroud)
cat /proc/meminfo
MemTotal: …Run Code Online (Sandbox Code Playgroud)