别名不适用于 centos 7

别名不适用于 centos 7

我正在尝试使用 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/profileshellrc都不会读取文件((t)csh1 除外)。想象一下,如果脚本根据调用它们的用户以及它们在~/.shellrc.

请注意,在命令行上传递密码是不好的做法,因为这是系统上的公共信息(显示在输出中,ps -f并且可能最终出现在日志中)。我不知道hammer是什么,但它很可能提供了更安全的替代方法来传递密码(例如通过环境变量、文件描述符或conf文件),如果没有,就会被设计破坏。


¹ 这就是您#! /bin/csh -f在那里使用 shebangs 的原因,尽管最好是至少在脚本编写中完全避免使用 (t)csh。

相关内容