Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

312
Views
Comprobar si el servicio está instalado o no en Linux

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." fi

salida sin systemctl:

 ./test.sh: line 5: systemctl: command not found [ ? ] hwclock.sh [ - ] mariadb [ - ] nginx [ - ] nginx-debug [ - ] procps [ - ] redis-server [ - ] rsync

salida con systemctl:

 ngnix.service does NOT exist.
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

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." fi
over 4 years ago · Santiago Trujillo Report

0

systemctl 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

over 4 years ago · Santiago Trujillo Report

0

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" fi

Explicació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.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!