我在下面写了一个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
从一些研究中我部分了解到,这是因为在创建变量时存在空间问题。不确定。我尝试使用一些解决方案,如sed和read。但它仍然显示出错误。有人能帮我吗?
谢谢问候
使用括号:
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集成。