Hasta hace poco, había una manera simple y efectiva de iniciar / detener / reiniciar servicios:
service nginx start|stop|restart
Esto funcionó perfectamente durante tantos años, ... hasta que algunos pantalones inteligentes decidieron mejorarlos y ahora me enfrento a los sistemas Debian / Ubuntu donde el service
script no hace nada (ya que se supone que debo usar las cosas como systemctl start nginx.service
(mucho más tiempo, sin trabajo de autocompletar, ...)
Mi pregunta se refiere especialmente a Debian y Ubuntu, pero también sería útil cubrir las distribuciones de CentOS / RedHat.
Entonces, ¿hay algo que pueda salvarme de estos cambios condenados?
En caso de que no estuviera claro, estoy buscando una forma consistente de lidiar con eso, una que funcione en Debian 7.x, 8.x, la última versión de Ubuntu LTS y no LTS.
PD. Fuera del alcance de esta pregunta específica, pero se otorgan felicitaciones adicionales si la solución también cubriría la parte de habilitar y deshabilitar para los servicios.
service
comando anterior con un contenedor que llama a servicectl?service
Realmente no hace nada por ti? Funciona como se esperaba en mi LMDE (que es básicamente una prueba de Debian), no pensé que fuera algo específico de LMDE. También funciona como se esperaba en mi Ubuntu VM.Respuestas:
Ha habido una serie de variados sistemas de control de arranque y servicio en las plataformas Unix a lo largo de su enredada historia.
El
service\chkconfig
sistema basado que encontró simple y efectivo generalmente se conoce como estilo SysVinit y fue un paso importante en el camino hacia algún tipo de estandarización. Encontrará este estilo de arranque en RHEL / CentOS (EL) hasta la versión 6, Fedora hasta la 14, y en distribuciones basadas en Debian / Ubuntu hasta 2015. Sin embargo, no fue el único sistema de arranque, el estilo BSD (más simple) El sistema init todavía tiene muchos ventiladores.SysVinit no fue una solución perfecta (¿qué es?) Y Systemd fue ideado para superar muchos de los problemas; Este es el
systemctl
sistema basado en comandos que está experimentando ahora. Aunque no es del agrado universal (las personas odian el cambio, la hinchazón, etc.) no hay duda de que se está convirtiendo rápidamente en el estándar de facto en la mayoría de las distribuciones.Por lo tanto, mirando hacia adelante de inmediato la respuesta a su pregunta original es simplemente:
La norma hacia los servicios de control a través de la mayoría de las distribuciones de Linux es ahora
systemctl
!Cuánto tiempo será válido esto es una incógnita; probablemente solo hasta que aparezca algo que sea mejor y sea ampliamente adoptado.
Estoy seguro de que habrá envoltorios disponibles para permitir, su favorito actual, los
service/chkconfig
comandos para continuar haciendo cosas en su mayoría sensatas, pero con esta curva de aprendizaje en particular, probablemente sea mejor no luchar contra ella. Tal vez mirando hacia el futuro, por un tiempo también habrásystemctl
envoltorios para sistemas más antiguos, para hacer que administrarlos junto con los más actuales sea menos doloroso;)fuente
... que es, como han dicho otros en comentarios, lo que se ha hecho desde hace mucho tiempo .
El
/usr/sbin/service
comando en Debian 8 es parte del paquete sysvinit-utils. Ha estado allí desde 2009. Es una adición originada en RedHat específica de Debian para el paquete original de fuente sysvinit, y como se puede ver al leer el script reconoce tanto la ejecución del sistema como la presencia de trabajos de arranque, la generación de comandos haciasystemctl
yinitctl
( a través de sus alias) respectivamente. Esto lo ha hecho desde 2013.service name action
está bastante disponible incluso en sistemas operativos que no son Linux. Incluso funcionará en la mayoría de los BSD, ya que ellos también tienen sus propiosservice
comandos. También hay unservice
comando shim en el paquete nosh que se traduce en . Pero …system-control action name
service
comando.service
comandos BSD tienen problemas bien conocidos de larga data que los administradores del sistema han estado contando historias de guerra durante décadas.Habilitar y deshabilitar servicios es una situación similar. Aunque el
chkconfig
programa SuSE (disponible empaquetado para Debian y Ubuntu) es muy diferente al de Fedora (están escritos en lenguajes de programación completamente diferentes, incluso, uno compilado, uno interpretado), hay una sintaxis mínima común , con acción siendo o . Pero …chkconfig name action
on
off
chkconfig
en los BSD, ya que las herramientas convencionales para esto son biensysrc
o el más reciente de OpenBSDrcctl enable
yrcctl disable
. Haychkconfig
yrcctl
cuñas en el paquete nosh que se traducen en y .system-control enable name
system-control disable name
chkconfig
sabe acerca de systemd y actúa como un calce parasystemctl enable
ysystemctl disable
. El SuSEchkconfig
no tiene conocimiento de systemd.Otras lecturas
script/service
. init-system-helpers. Archivo fuente de Debian.telinit
. nosh Guide . 1.20. Los softwares de JdeBP.service
comando . Nosh páginas. Los softwares de JdeBP.service
. §8. Páginas del manual de FreeBSD.fuente
No hay una forma estándar de iniciar y detener servicios en Linux.
Pruebe la herramienta de gestión / configuración de configuración: Ansible , Chef , Saltstack , Puppet o lo que sea.
Puede iniciar y habilitar un servicio con Ansible:
Eche un vistazo a la clase LinuxService en el
service
módulo de Ansible :fuente
Su problema es que Debian / Ubuntu han cambiado a lo nuevo
systemd
como reemplazo de lo viejosysvinit
. Pregunte cuál es mejor y comenzará una guerra de llamas, pero siempre puede volver a la anteriorsysvinit
, verifique esto si desea volver.fuente