Soy nuevo en Linux y me he estado probando usando una instancia de Amazon Lightsail (Ubuntu 16.04 LTS).
Al revisar las muchas guías que he encontrado, veo personas que utilizan diferentes comandos para iniciar / detener / reiniciar / recargar / verificar el estado de un servicio. Específicamente estos;
sudo systemctl status apache2.service
sudo /bin/systemctl status apache2.service
sudo /etc/init.d/apache2 status
sudo service apache2 status
Todos los comandos anteriores funcionan.
- ¿Debería preferir un comando sobre el otro?
- En caso afirmativo, ¿por qué?
- ¿Hay otros comandos que deba tener en cuenta?
El uso de init.d en Monit causó problemas cuando quería usar la opción de estado (el estado será que el servicio está fuera de línea cuando realmente estaba en línea, reiniciado por Monit). Cambie el código en Monit de inid.d a / bin / systemctl lo arregló.
Parece que el uso de init.d proporciona más información sobre lo que sucedió que los demás. Si debo usar uno de los otros comandos, ¿es posible que muestren más información sobre lo que se hizo?
ubuntu@ip-172-26-12-245:~$ sudo systemctl restart pure-ftpd.service
ubuntu@ip-172-26-12-245:~$ sudo /bin/systemctl restart pure-ftpd.service
ubuntu@ip-172-26-12-245:~$ sudo /etc/init.d/pure-ftpd restart
[ ok ] Restarting pure-ftpd (via systemctl): pure-ftpd.service.
ubuntu@ip-172-26-12-245:~$ sudo service pure-ftpd restart
ubuntu@ip-172-26-12-245:~$
Quisiera agradecer de antemano a todos los que se han tomado el tiempo de leer y responder a esta pregunta.
fuente
systemctl
es la sintaxis preferida yservice
se proporciona como compatibilidad con versiones anteriores./etc/init.d/pure-ftpd
o similar están llamando a los scripts de inicio / detención directamente.Respuestas:
Para empezar, hay toda una historia y una lucha entre ir de
SysVInit
aSystemD
. Sin embargo, en lugar de tratar de desglosar todo esto en una respuesta, lo referiré a algunas empresas de Google para obtener más detalles sobre la historia, así como un artículo en particular sobre el tema:http://www.tecmint.com/systemd-replaces-init-in-linux/
En resumen, sin embargo, ha sido una transición lenta y ardua. Algunas características heredadas se mantuvieron intactas (como
init.d
hasta cierto punto). Si tiene la opción de usarsystemctl
para el control de su servicio, le recomiendo usar esa. Es el futuro previsible para Linux y, finalmente, losSysVInit
métodos más antiguos se considerarán obsoletos por completo y se eliminarán.Para cubrir cada uno que enumeró específicamente:
sudo systemctl status apache2.service
Este es el nuevo
SystemD
enfoque para el manejo de servicios. En el futuro, las aplicaciones en Linux están diseñadas para usar el método systemd, no cualquier otro.sudo /bin/systemctl status apache2.service
Esto es lo mismo que el comando anterior. La única diferencia en este caso es que no depende de la
$PATH
variable de entorno del shell encontrar el comando, sino que enumera el comando explícitamente al incluir la ruta al comando.sudo /etc/init.d/apache2 status
Este es el
SysVInit
método original de llamar a un servicio. Los scripts de inicio se escribirían para un servicio y se colocarían en este directorio. Si bien este método todavía es utilizado por muchos,service
fue el comando que reemplazó este método de invocar serviciosSysVInit
. Hay algunas funcionalidades heredadas para esto en los sistemasSystemD
más nuevos, pero la mayoría de los programas más nuevos no incluyen esto, y no todos los scripts de inicio de aplicaciones más antiguos funcionan con él.sudo service apache2 status
Esta fue la herramienta principal utilizada en los
SysVInit
sistemas de servicios. En algunos casos simplemente se vinculó a los/etc/init.d/
scripts, pero en otros casos fue a un script de inicio almacenado en otro lugar. Estaba destinado a proporcionar una transición más fluida en el manejo de la dependencia del servicio.Por último, menciona que desea saber cómo obtener más información de los comandos, ya que algunos proporcionan más información que otros. Esto casi siempre está determinado por la aplicación y cómo diseñaron su archivo de inicio o servicio. Sin embargo, como regla general, si se completó en silencio, tuvo éxito. Sin embargo, para verificar a
start
,stop
orestart
, puede usar elstatus
subcomando para ver cómo está funcionando. Usted mencionó que unstatus
comando es incorrecto en un script de inicio antiguo. Ese es un error que los desarrolladores de aplicaciones tendrían que mirar. Sin embargo, dado que los scripts de inicio se están convirtiendo en el método obsoleto de manejo de servicios, pueden ignorar el error hasta que eliminen por completo la opción de script de inicio. lossystemctl status
siempre debe funcionar correctamente; de lo contrario, se debe registrar un error con los desarrolladores de la aplicación.fuente
systemctl
buscarán en los directorios donde se almacenan los archivos de servicio y agregarán el ".service" si lo encuentra. Entonces, por ejemplo, si presiona la pestaña una vez después de solo escribirlosudo systemctl status apache2
, debe completarlo agregando.service
para usted. Si hay más de un archivo systemctl apache2 (como.service
y.target
que tendría que pestaña golpe dos veces para que todos las opciones disponibles muestra.