Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何通过shell脚本检查数据库连接?_Database_Shell_Alert_Jobs - Fatal编程技术网

Database 如何通过shell脚本检查数据库连接?

Database 如何通过shell脚本检查数据库连接?,database,shell,alert,jobs,Database,Shell,Alert,Jobs,我对脚本编写非常陌生,我已经厌倦了编写一个脚本来检查数据库连接是否存在。我计划创建一个作业,在特定的时间间隔内检查数据库连接并发送警报邮件 这是我写累了的代码,请更正或建议: echo "exit" | sqlplus -L uid/pwd@dbname | grep Connected > /dev/null if [ $? -eq 0 ] then mailx -s "DB connection error" maild_id else

我对脚本编写非常陌生,我已经厌倦了编写一个脚本来检查数据库连接是否存在。我计划创建一个作业,在特定的时间间隔内检查数据库连接并发送警报邮件

这是我写累了的代码,请更正或建议:

echo "exit" | sqlplus -L uid/pwd@dbname | grep Connected > /dev/null
if [ $? -eq 0 ] 
then
   mailx -s "DB connection error" maild_id
else
   mailx -s "DB connection successful" maild_id
fi

您的脚本看起来不错,但有一个逻辑缺陷。与几乎所有命令一样,
grep
成功后将返回退出代码0<代码>grep“Connected”将在sqlplus输出“Connected”时成功。因此,您的脚本应该如下所示:

echo "exit" | sqlplus -L uid/pwd@dbname | grep Connected > /dev/null
if [ $? -eq 0 ] 
then
   mailx -s "DB connection successful" maild_id

else
   mailx -s "DB connection error" maild_id
fi
if
   echo "exit" | sqlplus -L uid/pwd@dbname | grep -q Connected 
then 
   mailx -s "DB connection successful" maild_id
else 
   mailx -s "DB connection error" maild_id
fi
以下是您可以进行的一些改进:

  • 当stdin上没有更多输入时,sqlplus将退出。因此,“回声”出口是不必要的
  • 如果使用
    -q
    (安静)参数,可以避免将
    grep
    重定向到
    /dev/null
    grep
    将只返回0或1个退出代码,表明它找到了字符串
  • 您可能会发现sqlplus在成功连接时返回0退出代码。您可能不必查找字符串“Connected”
  • 您可以将sqlplus命令作为
    if
    条件执行
  • 把所有这些放在一起:

    if
       >/dev/null sqlplus -L uid/pwd@dbname 
    then 
       mailx -s "DB connection successful" maild_id
    else 
       mailx -s "DB connection error" maild_id
    fi
    
    但是,如果我对sqlplus退出代码的理解有误,您仍然可以这样编写脚本:

    echo "exit" | sqlplus -L uid/pwd@dbname | grep Connected > /dev/null
    if [ $? -eq 0 ] 
    then
       mailx -s "DB connection successful" maild_id
    
    else
       mailx -s "DB connection error" maild_id
    fi
    
    if
       echo "exit" | sqlplus -L uid/pwd@dbname | grep -q Connected 
    then 
       mailx -s "DB connection successful" maild_id
    else 
       mailx -s "DB connection error" maild_id
    fi
    
    你也可以避免if;然后,;其他的通过使用
    和&
    共轭,fi构造
    &&
    是一个逻辑AND运算符-只有当左表达式为真时,它才会计算右表达式(它使用短路布尔逻辑)。使用这个概念和sqlplus的一个假设,我们可以将您的代码重新编写得更简洁(但可能不那么清晰),如下所示:


    你的问题是什么?在你的剧本结尾的三个反引号字符应该做什么?这是一个打字错误。。我想写一个shell脚本来检查数据库连接,成功与否。如何通过shell脚本检查数据库连接?不要把重要信息放在评论中,而是放在你的问题中。您发布的代码在哪些方面没有达到预期效果?嗨,Jain,请更新问题,让我们知道哪里出了问题。sqlplus命令是否按预期运行?感谢Mark的建议。但是我必须这样连接数据库:./ssgodbc.linux64-d“dsn”-u“username”-p“pswd”-v如何更改此脚本?我尝试了替换sql部分,但没有成功尝试重写您的问题/帖子以分享您看到的错误。这样,整个社区都可以从你的情况中学习。