首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检查bash中是否存在服务(CentOS和Ubuntu)

检查bash中是否存在服务(CentOS和Ubuntu)
EN

Stack Overflow用户
提问于 2014-06-25 08:04:44
回答 9查看 47K关注 0票数 34

bash中检查服务是否已安装的最佳方法是什么?它应该在Red (CentOS)和Ubuntu上都能工作吗?

思考:

代码语言:javascript
复制
service="mysqld"
if [ -f "/etc/init.d/$service" ]; then
    # mysqld service exists
fi

也可以使用service命令并检查返回代码。

代码语言:javascript
复制
service mysqld status
if [ $? = 0 ]; then
    # mysqld service exists
fi

最佳解决方案是什么?

EN

回答 9

Stack Overflow用户

发布于 2018-12-06 04:34:49

要获取一个服务的状态而不"pinging“所有其他服务,您可以使用以下命令:

代码语言:javascript
复制
systemctl list-units --full -all | grep -Fq "$SERVICENAME.service"

顺便说一句,这就是bash (自动)完成中使用的(参见文件/usr/share/bash-completion/bash_completion,查找_services):

代码语言:javascript
复制
COMPREPLY+=( $( systemctl list-units --full --all 2>/dev/null | \
   awk '$1 ~ /\.service$/ { sub("\\.service$", "", $1); print $1 }' ) )

或者一个更复杂的解决方案:

代码语言:javascript
复制
service_exists() {
    local n=$1
    if [[ $(systemctl list-units --all -t service --full --no-legend "$n.service" | sed 's/^\s*//g' | cut -f1 -d' ') == $n.service ]]; then
        return 0
    else
        return 1
    fi
}
if service_exists systemd-networkd; then
    ...
fi

希望能帮上忙。

票数 23
EN

Stack Overflow用户

发布于 2015-01-15 04:23:04

Rustam Mamat为此赢得了赞誉:

如果列出了所有服务,则可以grep结果以查看其中的内容。例如:

代码语言:javascript
复制
# Restart apache2 service, if it exists.    
if service --status-all | grep -Fq 'apache2'; then    
  sudo service apache2 restart    
fi
票数 19
EN

Stack Overflow用户

发布于 2020-03-14 20:08:52

在SystemD系统上:

代码语言:javascript
复制
serviceName="Name of your service"

if systemctl --all --type service | grep -q "$serviceName";then
    echo "$serviceName exists."
else
    echo "$serviceName does NOT exist."
fi

在Upstart系统上:

代码语言:javascript
复制
serviceName="Name of your service"

if initctl list | grep -q "$serviceName";then
    echo "$serviceName exists."
else
    echo "$serviceName does NOT exist."
fi

在SysV (System V)系统上:

代码语言:javascript
复制
serviceName="Name of your service"

if service --status-all | grep -q "$serviceName";then
    echo "$serviceName exists."
else
    echo "$serviceName does NOT exist."
fi
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24398242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档