【问题标题】:Shell Scripting passing arguments to a system binary and storing the valueShell 脚本将参数传递给系统二进制文件并存储值
【发布时间】:2015-05-18 17:59:09
【问题描述】:

我已经尝试过几次让这个工作,但我似乎遇到了一些麻烦。

asterisk -rx "core show calls" | grep "active" | cut -d' ' -f1

星号命令从/usr/sbin/asterisk 运行,像这样启动它,执行星号可执行文件并管道输出,grep 用于活动调用。 我通常会得到一个整数值,我想将其存储在一个变量中并从那里继续运行脚本。

我很难将参数传递给命令。

我基本上是在尝试将该命令变成一个 SHELL SCRIPT 并存储该值。

你们能指出我正确的方向吗?

【问题讨论】:

  • 什么命令的参数?你想通过什么论据?你试过什么?什么不完全有效?
  • 我尝试过这样的事情:#!/bin/sh echo -e "/usr/sbin/asterisk $1";
  • 你在哪里试过?怎么叫?那没用怎么办?当 cron 运行时,您希望脚本从哪里获取参数(假设这是这里的问题)?
  • 老实说,我什至还没有设置 cron 作业,我只是希望能够编写一个可以将参数传递给星号的脚本。执行上面的命令会输出一个值,我想将该值用作变量并从那里开始工作。
  • 只有-rx "core show calls"asterisk 的参数,并且您知道如何将它们传递给它(您在帖子中的示例命令是正确的)。整个管道是有效的(假设 active 是您需要的关键字,并且 cut 在每一行上找到正确的字段。如果问题是如何将其存储在变量中并在计算计数时使用它后来这是一个 wildly 不同的问题,然后开始了。

标签: shell scripting cron asterisk elastix


【解决方案1】:

怎么样:

active=$(asterisk -rx "core show calls" | awk '$2=="active"{n=$1} END{printf("%d",n)}')

这使用 awk 的 printf 来确保如果在您的输出中跳过活动调用行,您的变量将被分配一个 0 而不是空白。

或者,如果你的 shell 是 bash,你可以使用它来避免所有管道:

while read active what _; do
  if [ "$what" = "active" ]; then
    break
  fi
done < <(asterisk -rx "core show calls")

在此循环结束时,如果没有看到“活动呼叫”行,$active 将为空白,因此如果您愿意,可以添加:

active=${active:-0}

如果没有报告活动呼叫,则分配零值。

(在我的测试中,每次运行都会报告0 active calls,所以所有这些空白处理只是保险。)

【讨论】:

  • 我喜欢这个,但如果没有调用,则值始终为 0。我正在考虑设置一个 cron 作业,例如,如果调用超过 10 个,它将提醒我。但是我正在寻找更简单的东西,因为这是我的第一个 bash 脚本之一。
  • 听起来你真正想要的是一个监控系统。我使用Nagios,它具有plugins for Asterisk,但您可能会发现Zabbix 更易于管理。您可能还会发现Munin 或其他一些RRDtool 支持的系统很有用。看看Asterisk monitoring page at voip-info.org
  • 谢谢@ghoti 我会加入它,我没有正确配置 Nagios 的运气,另一个我从未听说过。今天早上我确实玩过 bash 脚本并找到了解决方案。我会发布它。
【解决方案2】:

我发现了这个 example 7.2.2.2 ,我已经对其进行了修改以解决我想要完成的任务, 因此,如果每次程序运行时我有超过 5 个调用,请通过电子邮件提醒我。

#!/bin/sh

rast=`asterisk -rx 'core show calls' | grep 'active' | cut -d' ' -f1`
maxvalue="5"

echo "Program started"

if [ "$rast" -ge "$maxvalue" ]; then
  echo "More than one calls processed" | mail -s 'Verify Calls from '`uname -n` hayonj@example.com
else
  echo "No active calls" | mail -s 'Crontab executed from '`uname -n` hayonj@example.com
fi

echo "Program Terminated"

将文件保存在verify.sh 下,我将它放在星号的二进制文件位于/sbin/ 的位置,并使用chmod a+x verify.sh 设置脚本的执行权限。

之后,我只需使用 crontab 进行设置, crontab -e* * * * * /sbin/verify.sh

这个小例子是我第一个自动化日常任务的 bash 脚本。

【讨论】:

    【解决方案3】:

    如果您的星号有一个名为“活动”的对等点,则所有其他示例都将不起作用

    注意,这个任务很简单

    asterisk -rx 'core show calls' |tail -n 2 | head -n 1|cut -f 1 -d\ 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多