Systemd puede manejar varios tipos de servicios diferentes, específicamente uno de los siguientes
simple
- Un proceso de larga duración que no funciona en segundo plano y permanece unido al shell.
forking
- Un demonio típico que se bifurca separándolo del proceso que lo ejecutó, de manera efectiva en segundo plano.
oneshot
- Un proceso de corta duración que se espera que salga.
dbus
- Como simple, pero la notificación de los procesos de inicio de finalización se envía a través de dbus.
notify
- Como simple, pero la notificación de los procesos de inicio de finalización se envía a través de inotify.
idle
- Como simple, pero el binario se inicia después de que se ha enviado el trabajo.
En su caso, ha elegido lo Type=forking
que significa que systemd está esperando que el proceso se bifurque y que el proceso principal finalice, lo que toma como una indicación de que el proceso ha comenzado con éxito. Sin embargo, su proceso no está haciendo esto: permanece en primer plano y, por systemctl start
lo tanto, se bloqueará indefinidamente o hasta que el proceso se bloquee.
En su lugar, desea Type=simple
, que es el valor predeterminado para que pueda eliminar la línea por completo para obtener el mismo efecto. En este modo, systemd no espera a que los procesos terminen de iniciarse (ya que no tiene forma de saber cuándo sucedió esto) y, por lo tanto, continúa ejecutando servicios dependientes de inmediato. En su caso no hay ninguno, así que esto no importa.
Una pequeña nota sobre seguridad:
Está ejecutando el servicio como root, se desaconseja, ya que es menos seguro que ejecutarlo como un usuario sin privilegios. La razón de esto es que si hay una vulnerabilidad en jekyll que de alguna manera permite la ejecución de comandos (posiblemente a través del código que está analizando), entonces el atacante no tiene que hacer nada más para poseer completamente su sistema. Si, por otro lado, se ejecuta como un usuario sin privilegios, el atacante solo puede hacer tanto daño como ese usuario y ahora debe intentar obtener privilegios de root para poseer completamente su sistema. Sin embargo, simplemente agrega una capa extra que deben atacar.
Simplemente puede ejecutarlo como el mismo usuario que está ejecutando su servidor web, pero esto lo deja abierto a otro posible ataque. Si hay una vulnerabilidad en su servidor web que le permite al usuario manipular archivos en su sistema, puede modificar los archivos html generados, o peor aún, los archivos fuente y hacer que su servidor sirva lo que quiera. Sin embargo, si el servidor web solo puede leer los archivos generados y los archivos fuente y se puede escribir en otro usuario sin privilegios, no podrán modificarlos tan fácilmente atacando el servidor web.
Sin embargo, si simplemente está sirviendo archivos estáticos desde este servidor y mantiene el servidor actualizado, estos ataques son muy poco probables, pero aún posibles. Es su responsabilidad sopesar los riesgos frente a la sobrecarga de configurarlo en función de la importancia de su sistema, pero estos dos consejos son muy simples de configurar y prácticamente no requieren gastos generales de mantenimiento.
Type=forking
. Además, no se ejecutaráexecStart
como una expansión de shell, por lo que&
al final nunca se entenderá como una bandera de fondo.