Ubuntu下Nginx频繁故障:Bash脚本语法疑问及优化咨询
关于Nginx监控脚本的疑问解答
1. 解释> /dev/null 2>&1
> /dev/null:把命令的标准输出(正常执行时的打印内容)重定向到/dev/null——这是系统里的"数据黑洞",任何写入的内容都会被直接丢弃,不会输出到终端。2>&1:把标准错误(命令执行出错时的提示内容)重定向到和标准输出相同的位置(也就是/dev/null)。合起来就是让这条命令执行时,不管是正常输出还是错误提示,都不会在终端显示任何内容,避免产生冗余信息。
2. 解释[ $? != 0 ]
$?是Bash的特殊变量,代表上一条命令的退出状态码:- 退出码为
0表示上一条命令执行成功(比如grep找到了匹配的内容); - 非
0表示执行失败(比如grep没找到匹配的内容)。
- 退出码为
[ $? != 0 ]就是判断上一条grep 'active (running)'是否失败——也就是Nginx没处于运行状态,此时触发重启操作。
3. 修改为直接判断failed状态的脚本
既然service nginx status会明确返回Active: failed状态,直接匹配这个关键词更精准,修改后的脚本如下:
# 检查Nginx状态是否包含"failed" if service nginx status | grep -q 'Active: failed'; then sudo service nginx restart > /dev/null 2>&1 fi
- 用
grep -q开启静默模式,不会输出任何内容,无需额外写> /dev/null; - Bash中
if可以直接跟命令,当命令退出码为0(即grep找到"failed")时,自动执行then块的重启操作,写法更简洁; - 注意你原命令里的
sude是拼写错误,正确写法是sudo。
内容的提问来源于stack exchange,提问作者Jerome
相关产品推荐
相关产品推荐

