Cuando una aplicación se ejecuta en segundo plano, se denomina servicio. Estos son esenciales para ejecutar el sistema o nuestras aplicaciones de software. Algunos de los servicios comunes que encontrará en la mayoría de los servidores son Apache, MySQL, NGINX, etc. Cuando el sistema se inicia, estos servicios se configuran para iniciarse automáticamente.
Estoy usando Ubuntu para alojar mis sitios web. También uso MySQL para almacenar todos los datos de mis sitios web. A veces, realizo actualizaciones periódicas y es esencial reiniciar estos servicios. En este tutorial, aprenderemos varias formas de iniciar, detener y reiniciar servicios en Ubuntu.
Diferentes formas de iniciar, detener y reiniciar servicios en Ubuntu
- comando systemctl
- comando de servicio
- guiones de inicio
Uso de systemctl para iniciar, detener y reiniciar los servicios de Ubuntu
Esta es la forma preferida de administrar los servicios de Ubuntu. Si no está seguro del nombre del servicio, puede ejecutar systemctl --all
Comando para listar todos los servicios. Pero puede haber cientos de servicios ejecutándose, por lo que es mejor filtrar la lista usando grep
comando.
Intentemos averiguar los nombres de los servicios de MySQL y el servidor Apache HTTP.
# systemctl --all | grep -i mysql mysql.service loaded active running MySQL Community Server # systemctl --all | grep -i apache apache2.service loaded active running The Apache HTTP Server #
Entonces, el nombre del servicio MySQL es "mysql.service" y el nombre del servicio del servidor Apache HTTP es "apache2.service".
Aprendamos cómo administrar estos servicios usando el comando systemctl.
1. Detener el servicio usando systemctl
# systemctl stop mysql.service #
El comando no da ningún resultado si la ejecución es exitosa.
2. Comprobación del estado del servicio mediante systemctl
Podemos verificar el estado del servicio usando el siguiente comando.
# systemctl status mysql.service ● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: inactive (dead) since Sat 2020-05-02 17:39:22 UTC; 9s ago Main PID: 26948 (code=exited, status=0/SUCCESS)
3. Inicie el servicio usando systemctl
# systemctl start mysql.service # # systemctl status mysql.service ● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-05-02 17:41:43 UTC; 3s ago Process: 30254 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid (code=exited, s Process: 30233 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Main PID: 30256 (mysqld) Tasks: 27 (limit: 2318) CGroup: /system.slice/mysql.service └─30256 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid
Observe que cuando detuvimos el servicio, el valor "Activo" estaba inactivo (muerto). Después de iniciar el servicio, cambia a activo (en ejecución).
4. Reinicie el servicio usando systemctl
# systemctl restart apache2.service # systemctl status apache2.service ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Sat 2020-05-02 17:55:09 UTC; 8s ago
Consejo :No es necesario utilizar el nombre de servicio completo con el comando systemctl. Por ejemplo, si ejecutamos "systemctl restart mysql", automáticamente agregará ".service" y ejecutará el comando "systemctl restart mysql.service".
Administrar los servicios de Ubuntu usando el comando de servicio
Podemos listar todos los servicios usando service --status-all
dominio. Si es necesario, use el comando grep para filtrar el servicio que está buscando.
# service --status-all | grep mysql [ + ] mysql #
En el comando de servicio, primero debemos especificar el nombre del servicio y luego el comando a ejecutar.
Detener un servicio:
# service mysql stop
Iniciar un servicio:
# service mysql start
Reiniciar un servicio:
# service mysql restart
Comprobación del estado del servicio:
# service mysql status ● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-05-02 18:19:34 UTC; 39s ago Process: 31768 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid (code=exited, s Process: 31746 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Main PID: 31770 (mysqld) Tasks: 27 (limit: 2318) CGroup: /system.slice/mysql.service └─31770 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid
Scripts de inicio de Ubuntu para administrar servicios
Los scripts de inicio de servicios se encuentran en /etc/init.d/
directorio. Podemos usar estos scripts para administrar los servicios. Sin embargo, ya no se recomienda usarlos y es mejor usar el comando systemctl.
Detener un servicio:
# /etc/init.d/mysql stop [ ok ] Stopping mysql (via systemctl): mysql.service. #
Iniciar un servicio:
# /etc/init.d/mysql start [ ok ] Starting mysql (via systemctl): mysql.service. #
Reiniciar un servicio:
# /etc/init.d/mysql restart [ ok ] Restarting mysql (via systemctl): mysql.service. #
Comprobación del estado del servicio:
# /etc/init.d/mysql status ● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-05-02 18:26:30 UTC; 17s ago
Problemas de permisos al iniciar/detener servicios
Si no ha iniciado sesión como usuario raíz, los comandos anteriores le pedirán que proporcione la contraseña de usuario raíz para ejecutar. Si se ingresa una contraseña incorrecta, se generará un error de autenticación fallida y el comando no se ejecutará.
Si está en la lista de sudoers, puede ejecutar estos comandos como usuario sudo. Si no está en la lista de sudoers, se mostrará un mensaje de error que indica que no está en la lista de sudoers y se informará del incidente.
test@localhost:~$ systemctl stop mysql ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units === Authentication is required to stop 'mysql.service'. Authenticating as: root Password: polkit-agent-helper-1: pam_authenticate failed: Authentication failure ==== AUTHENTICATION FAILED === Failed to stop mysql.service: Access denied See system logs and 'systemctl status mysql.service' for details. test@localhost:~$ sudo systemctl stop mysql [sudo] password for test: test is not in the sudoers file. This incident will be reported. test@localhost:~$
Entonces, si desea administrar algún servicio, asegúrese de tener los privilegios necesarios para ejecutar estos comandos.
Conclusión
Aprendimos varias formas de administrar servicios en Ubuntu. El comando systemctl es el enfoque preferido para iniciar/detener/reiniciar servicios en Ubuntu. Sin embargo, los scripts de inicio imprimen el estado del comando, lo que puede ser útil en los scripts de shell para ejecutarlos y obtener inmediatamente el estado del comando.