Confundido acerca de "/etc/init.d" y los servicios en "/ lib / systemd / system"

15

Soy completamente nuevo en el mundo de Linux, así que lamento cualquier error que pueda decir.

Estoy tratando de ejecutar un Mongo DB en una máquina Debian 8.5. Cuando instalé el paquete (precompilado desde percona.com), noté los siguientes archivos:

/etc/init.d/mongod (1)
/lib/systemd/system/mongod.service (2)

Sobre /etc/init.d/mongod

Entiendo que esto se llama (siempre y cuando se registre a través de update-rc.d) en el arranque / en otros estados del sistema en particular (no quiero obtener información técnica sobre esto, estoy absorbiendo mucha información y esto parece menos importante).

Esto está perfectamente bien para mí. El script realiza muchas inicializaciones y finalmente lanza el demonio mongo. Parece tener "disparadores" para iniciar, detener, reiniciar, etc. y, por lo que tengo entendido, puedo activarlos con sudo service mongod <action>.

Acerca de /lib/systemd/system/mongod.service

Este archivo parece hacer lo mismo (es decir, ejecutar mongo), pero con menos configuración, solo una línea en el parámetro ExecStart:

[Unit]
Description=MongoDB (High-performance, schema-free document-oriented database)
After=time-sync.target network.target
[Service]
Type=forking
User=mongod
Group=mongod
PermissionsStartOnly=true
EnvironmentFile=/etc/default/mongod
ExecStart=/usr/bin/env bash -c "/usr/bin/mongod $OPTIONS > ${STDOUT} 2> ${STDERR}"
PIDFile=/var/run/mongod.pid
[Install]
WantedBy=multi-user.target

Por lo que yo entiendo, esto se puede activar con sudo systemctl start mongod.

  • No entiendo si esto se llama en el arranque o no.

  • No entiendo por qué la necesidad de dos de estos archivos de 'servicio' y cómo puedo deshacerme de uno (posiblemente el que está en / lib / systemd, ya que es mucho más simple).

  • No entiendo si hay alguna relación entre los dos.

  • He leído que también systemctlfunciona en init.dscripts, y en este caso no entiendo cuál de los dos archivos se activará systemctl mongod start.

Creo que hay algo de redundancia y debería elegir solo una de las dos formas. Y quiero estar seguro de que es

  • llamado en el arranque
  • invocable por comando (como serviceo systemctl).

¿Podrías ayudarme a aclarar mi mente? Con la ayuda de algunos comentarios, probablemente pueda enfocar y reducir la pregunta.

natario
fuente

Respuestas:

12

Cuando tiene un init.dscript y un .servicearchivo systemd con el mismo nombre, systemd usará el archivo de servicio para todas las operaciones. Creo que el servicecomando simplemente redirigirá a systemd. El script init.d será ignorado.

Uso systemd. Es nuevo en Debian 8, pero es el predeterminado. Se supone que los archivos de servicio de Systemd parecen más simples que los scripts init.d. No mencionó ninguna característica específica que necesite que no sea compatible con el servicio systemd.

Si el archivo de servicio no se incluye, systemdcon gusto usaría el script init.d. Entonces, el desarrollador del paquete mongod te dice que piensan que esta definición del sistema es mejor :).

Mira la salida de systemctl status mongod. Si el servicio está habilitado para iniciarse en el momento del arranque, la Loaded:línea mostrará "habilitado". De lo contrario, puede usar systemctl enable mongod. También puede incluir la opción --now, y comenzará mongod al mismo tiempo.

sourcejedi
fuente
¡Gracias! Voy a estudiar systemd y eventualmente usarlo. Por ahora, quería deshabilitar eso y finalmente ejecutar el script init.d en el que he estado trabajando. Fui: systemctl disable mongod; luego cambió el nombre de mongod.service a mongod-backup.service; entonces systemctl daemon-reload. ¿Crees que esto fue correcto? He leído que no debe modificar archivos en / lib / systemd / system /, pero sin cambiar el nombre, systemctl siguió ignorando el script init.d.
natario
Los archivos en / lib / systemd no son conffiles. Realmente no puedo recomendar instalar un paquete Debian y modificar sus archivos (y luego actualizar el paquete). En su lugar, debe cambiar el nombre del script init.d en el que ha estado "trabajando" (¿presumiblemente modificando?). Las secuencias de comandos init.d tienden a ser conffiles. Si una actualización cambia un archivo de conffg (por lo que no debería haber ningún motivo), se lo advertirá primero. En este caso, esperaría que le notifique si alguna vez está disponible una versión actualizada del guión init.d original (efectivamente) eliminado.
sourcejedi
Es posible que necesite agregar dependencias de pedido en su nuevo servicio, a los servicios que dependían mongod. También existe la posibilidad de que tenga que eliminar algunas dependencias estrictas, pero no lo habría pensado. Una forma segura de modificar los servicios afectados es copiarlos /etc/systemd/system/y modificar la copia.
sourcejedi
En general, creo que seguir con systemd es más simple. Ahora estás estudiando bash, init-functions y las características de compatibilidad inversa de systemd. Como no está aprendiendo un sistema de inicio SysV puro, si alguna vez utiliza dicho sistema, existe el riesgo de que espere características que realmente provienen de systemd.
sourcejedi