在bash中检查服务是否已安装的最佳方法是什么?它应该在Red (CentOS)和Ubuntu上都能工作吗?
思考:
service="mysqld"
if [ -f "/etc/init.d/$service" ]; then
# mysqld service exists
fi
也可以使用service
命令并检查返回代码。
service mysqld status
if [ $? = 0 ]; then
# mysqld service exists
fi
最佳解决方案是什么?
发布于 2018-12-06 04:34:49
要获取一个服务的状态而不"pinging“所有其他服务,您可以使用以下命令:
systemctl list-units --full -all | grep -Fq "$SERVICENAME.service"
顺便说一句,这就是bash (自动)完成中使用的(参见文件/usr/share/bash-completion/bash_completion,查找_services):
COMPREPLY+=( $( systemctl list-units --full --all 2>/dev/null | \
awk '$1 ~ /\.service$/ { sub("\\.service$", "", $1); print $1 }' ) )
或者一个更复杂的解决方案:
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
希望能帮上忙。
发布于 2015-01-15 04:23:04
Rustam Mamat为此赢得了赞誉:
如果列出了所有服务,则可以grep结果以查看其中的内容。例如:
# Restart apache2 service, if it exists.
if service --status-all | grep -Fq 'apache2'; then
sudo service apache2 restart
fi
发布于 2020-03-14 20:08:52
在SystemD系统上:
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系统上:
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)系统上:
serviceName="Name of your service"
if service --status-all | grep -q "$serviceName";then
echo "$serviceName exists."
else
echo "$serviceName does NOT exist."
fi
https://stackoverflow.com/questions/24398242
复制相似问题