这是脚本,但即使Apache正在运行它的show stop,输出也是错误的。我使用的是Ubuntu 12.04。编写脚本来检查是否正在运行的远程主机服务
ssh -qn [email protected] ip
if ps aux | grep [h]ttpd > /dev/null
then
echo "Apcache is running"
else
echo "Apcahe is not running"
fi
这是脚本,但即使Apache正在运行它的show stop,输出也是错误的。我使用的是Ubuntu 12.04。编写脚本来检查是否正在运行的远程主机服务
ssh -qn [email protected] ip
if ps aux | grep [h]ttpd > /dev/null
then
echo "Apcache is running"
else
echo "Apcahe is not running"
fi
您没有在远程主机上运行命令。
试试这个。
if ssh -qn [email protected] ps aux | grep -q httpd; then
echo "Apache is running"
else
echo "Apache is not running"
fi
只要是明确的,ps aux
是参数ssh
,因此这是被远程主机上执行了什么。 grep
作为本地脚本的子节点运行。
首先,httpd在ubuntu中不可用。对于Ubuntu的Apache2是可用的。
所以这个命令ps aux | grep [h]ttpd
将无法在Ubuntu的工作。
无需编写任何脚本来检查Apache的状态。从ubuntu的终端运行此命令,以获得状态:
sudo service apache2 status
输出将是:
A>如果Apache运行:Apache2 is running (pid 1234)
B>如果Apache没有运行:Apache2 is NOT running.
由于ssh以远程命令的退出状态返回检查ssh的手册页并搜索退出状态
所以它的那样简单
ssh [email protected] "/etc/init.d/apache2 status"
if [ $? -ne 0 ]; then # if service is running exit status is 0 for "/etc/init.d/apache2 status"
echo "Apache is not running"
else
echo "Apache is running"
fi
你不需要PS或者grep的这个
显式检查'$?'是一个反模式。 “if”和朋友的目的恰恰是运行命令并检查其退出状态。写这个的惯用方式就是'if ssh root @ ip“/etc/init.d/apache2 status”;那么......(这里的引用实际上是可选的)。 – tripleee
尝试以下操作:
if ssh -qn [email protected] pidof httpd &>/dev/null ; then
echo "Apache is running";
exit 0;
else
echo "Apache is not running";
exit 1;
fi
这些exit
命令将发送正确的EXIT_SUCCESS和EXIT_FAILURE(如果需要,将来可以使用此扩展脚本)。
只有一个忠告:最好把脚本作为远程过程通过SSH账号
同意与sudoer用户运行。另外,为了检查服务是否正在运行,我宁愿使用'/etc/init.d/httpd status | grep pid'而不是'ps aux | grep -q httpd' – yejinxin