Estoy tratando de obtener el servicio, ya sea que esté instalado o no. El script funciona bien con systemctl pero falla cuando systemctl no está instalado. Como alternativa a eso, estoy usando el comando de servicio para verificar, pero al hacerlo, no puedo ejecutar el comando grep para un servicio específico de grep. Este script debe ejecutarse en varias máquinas Linux (algunas con systemctl y otras sin él). Cualquier ayuda sería apreciada
prueba.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." fisalida sin systemctl:
./test.sh: line 5: systemctl: command not found [ ? ] hwclock.sh [ - ] mariadb [ - ] nginx [ - ] nginx-debug [ - ] procps [ - ] redis-server [ - ] rsyncsalida con systemctl:
ngnix.service does NOT exist.Coloque ambos comandos en un grupo de comandos y redirija todo el grupo de comandos a 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." fisystemctl es una utilidad de control para administrar unidades systemd. Puede intentar verificar la presencia de nginx dentro de /usr/lib/systemd/ en el caso de un sistema de inicio basado en systemd. No olvides la filosofía "Todo es un archivo". Consulte man systemd.unit para obtener más información. Para distribuciones antiguas con init init system verifique el directorio /etc/init.d/ vea el servicio man
Si no desea verificar si el sistema tiene sysV o initd dentro, puede buscar solo el binario. Si el binario existe, puede suponer que el paquete y los servicios están instalados. Por ejemplo:
#!/usr/bin/env bash is_nginx_exists=$(which nginx) if [[ $? == 0 ]]; then echo "YES" else echo "NO" fiExplicación:
which nginx: intentará encontrar el binario nginx de todo el sistema
lista de binarios;ps - este comando determina si el comando anterior se ejecutó con éxito. En nuestro caso, 0 significa que se encontró el binario;
Es rápido, limpio y lo más importante funciona en máquinas virtuales normales, contenedores docker, etc.