我正在尝试使用 checkmk MRPE 插件为工头设置自定义监控。检查( bash shell 脚本)在 shell 内工作正常,但是在外部的 telnet 上我无法获得输出
该问题似乎是用户的别名,涉及为其分配管理员密码,但不起作用。因此,输出不正确。
我已在 shell 脚本和 /etc/profile 中添加了别名,但是 checkmk 代理仍然无法正确调用它。
知道我缺少什么吗
#!/bin/bash
shopt -s expand_aliases
alias hammer='hammer -u admin -p XXXXXXXXXXX'
STATE_OK=0
STATE_CRITICAL=2
STATUS=`hammer capsule content synchronization-status --id 11|grep Status:|grep "Capsule is synchronized"`
RET_VAL=$?
if [ "$RET_VAL" != "0" ]
then
ERR_STATUS=`hammer capsule content synchronization-status --id 11|grep -i status|cut -d ":" -f 3`
echo "$ERR_STATUS needs to be synced."
exit $STATE_CRITICAL
else
echo "Capsule is synchronized."
exit $STATE_OK
fi
答案1
最好避免使用别名,尤其是在脚本中。在这里,我会写:
#!/bin/bash -
typeset -A code=([OK]=0 [WARNING]=1 [CRITICAL]=2 [UNKNOWN]=3)
hammer() {
command hammer -u admin -p XXXXXXXXXXX "$@"
}
result=UNKNOWN
if
status=$(
hammer capsule content synchronization-status --id 11|
grep 'Status:'
)
then
if
[[ $status = *'Capsule is synchronized'* ]]
then
message='Capsule is synchronized.'
result=OK
else
message="$status needs to be synced."
result=CRITICAL
fi
else
message="Can't determine status."
fi
printf '%s\n' "$result - $message"
exit "${code[$result]}"
在任何情况下,启动解释脚本的/etc/profile
shellrc
都不会读取文件((t)csh1 除外)。想象一下,如果脚本根据调用它们的用户以及它们在~/.shellrc
.
请注意,在命令行上传递密码是不好的做法,因为这是系统上的公共信息(显示在输出中,ps -f
并且可能最终出现在日志中)。我不知道hammer
是什么,但它很可能提供了更安全的替代方法来传递密码(例如通过环境变量、文件描述符或conf文件),如果没有,就会被设计破坏。
¹ 这就是您#! /bin/csh -f
在那里使用 shebangs 的原因,尽管最好是至少在脚本编写中完全避免使用 (t)csh。