我正在嘗試獲取該服務,無論它是否已安裝。該腳本在 systemctl 上運行良好,但在未安裝 systemctl 的情況下失敗。作為替代方案,我正在使用服務命令進行檢查,但這樣做我無法運行 grep 命令來 grep 特定服務。該腳本需要在多臺 linux 機器上運行(有些帶有 systemctl,有些沒有)。任何幫助,將不勝感激
測驗.sh
#!/bin/bash
serviceName=ngnix.service
if (systemctl --all --type service || service --status-all) && grep -q "$serviceName";then
echo "$serviceName exists."
else
echo "$serviceName does NOT exist."
fi
沒有 systemctl 的輸出:
./test.sh: line 5: systemctl: command not found
[ ? ] hwclock.sh
[ - ] mariadb
[ - ] nginx
[ - ] nginx-debug
[ - ] procps
[ - ] redis-server
[ - ] rsync
使用 systemctl 輸出:
ngnix.service does NOT exist.
uj5u.com熱心網友回復:
將兩個命令放在一個命令組中,并將整個命令組重定向到grep:
if { systemctl --all --type service || service --status-all; } 2>/dev/null |
grep -q "$serviceName"; then
echo "$serviceName exists."
else
echo "$serviceName does NOT exist."
fi
uj5u.com熱心網友回復:
systemctl 是用于管理 systemd 單元的控制實用程式。如果是基于 systemd 的初始化系統,您可以嘗試檢查 /usr/lib/systemd/ 中的 nginx 存在。不要忘記“一切都是檔案”的理念。有關更多說明,請參見man systemd.unit。對于具有initinit 系統檢查目錄 /etc/init.d/ 的古代發行版,請參閱man service
uj5u.com熱心網友回復:
如果您不想檢查系統內部是否有 sysV 或 initd,您可以只搜索二進制檔案。如果二進制檔案存在,您可以假設已安裝包和服務。例如:
#!/usr/bin/env bash
is_nginx_exists=$(which nginx)
if [[ $? == 0 ]]; then
echo "YES"
else
echo "NO"
fi
解釋:
which nginx - 將嘗試從系統范圍的
二進制檔案串列中查找 nginx 二進制檔案;美元?- 此命令確定上一個命令是否成功執行。在我們的例子中,0 表示找到了二進制檔案;
它在常規 VM、docker 容器等中快速、干凈且最重要。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/455985.html
