找不到运行shell脚本时出错



我在下面写了一个shell脚本

unicorn_cnt=$(ps -ef | grep -v grep | grep -c unicorn)
if (( $unicorn_cnt == 0 )); then
 echo "Unicorn Stopped" | mail -s "Alert - Unicorn" someone@somedomin.com
fi
delayed_job_cnt=$(ps -ef | grep -v grep | grep -c delayed_job)
if (( $delayed_job_cnt == 0 )); then
 echo "Delayed Job Stopped" | mail -s "Alert - Unicorn" someone@somedomin.com
fi
rake_cnt=$(ps -ef | grep -v grep | grep -c rake)
if (( $rake_cnt == 0 )); then
  echo "Convertion Stopped" | mail -s "Alert - Unicorn" someone@somedomin.com
fi

这是为了检查,是进程正在运行,如果不发送警报邮件。我对shell脚本不太熟悉。运行时显示以下错误。

process.sh: 3: process.sh: 2: not found
process.sh: 7: process.sh: 0: not found
process.sh: 11: process.sh: 0: not found

从一些研究中我部分了解到,这是因为在创建变量时存在空间问题。不确定。我尝试使用一些解决方案,如sedread。但它仍然显示出错误。有人能帮我吗?

谢谢问候

使用括号:

if [ "$unicorn_cnt" == 0 ]; then

或者最好这样写:

if ! ps -ef | grep -q [u]nicorn; then
 echo "Unicorn Stopped" | mail -s "Alert - Unicorn" someone@somedomin.com
fi

这意味着"检查ps-ef中是否有独角兽,如果没有找到,就这样做"

对于数字比较,应该使用eq而不是==。对条件表达式使用[[。在邮件命令中使用here字符串而不是echo

试试这个:

if [[ $unicorn_cnt -eq 0 ]]; then
    mail -s "Alert - Unicorn" someone@somedomin.com <<< "Unicorn Stopped"
fi

从上面的提示中,我找到了答案。

unicorn_cnt=$(ps -ef | grep -v grep | grep -c unicorn)
if [ $unicorn_cnt -eq 0 ]; 
then
  echo "Unicorn Stopped" | mail -s "Alert - Unicorn" someone@somedomin.com
fi
delayed_job_cnt=$(ps -ef | grep -v grep | grep -c delayed_job)
if [ $delayed_job_cnt -eq 0 ]; 
then
  echo "Delayed Job Stopped" | mail -s "Alert - Delayed Job" someone@somedomin.com
fi
rake_cnt=$(ps -ef | grep -v grep | grep -c rake)
if [ $rake_cnt -eq 0 ]; 
then
  echo "Convertion Stopped" | mail -s "Alert - Convertion" someone@somedomin.com
fi

它现在运行良好,我们也可以将它与cronjob集成。

相关内容

  • 没有找到相关文章

最新更新