O Systemd pode lidar com vários tipos de serviço diferentes, especificamente um dos seguintes
simple
- Um processo de execução demorada que não se destaca e permanece anexado ao shell.
forking
- Um daemon típico que se bifurca desanexando-o do processo que o executou, efetivamente se background.
oneshot
- Um processo de curta duração que deve sair.
dbus
- Simples, mas a notificação dos processos de inicialização é enviada pelo dbus.
notify
- Simples, mas a notificação do acabamento da inicialização dos processos é enviada por inotify.
idle
- Como simples, mas o binário é iniciado após o envio do trabalho.
No seu caso, você escolheu o Type=forking
que significa que o systemd está aguardando o processo de bifurcar-se e o processo pai terminar, o que é uma indicação de que o processo foi iniciado com êxito. No entanto, seu processo não está fazendo isso - ele permanece em primeiro plano e, portanto, systemctl start
ficará travado indefinidamente ou até que os processos travem.
Em vez disso, você deseja Type=simple
, que é o padrão, para que você possa remover completamente a linha para obter o mesmo efeito. Nesse modo, o systemd não espera a conclusão dos processos (como não há como saber quando isso aconteceu) e, portanto, continua executando os serviços dependentes imediatamente. No seu caso, não há nenhum, então isso não importa.
Uma pequena nota sobre segurança:
Você está executando o serviço como root; isso é desencorajado, pois é menos seguro do que executá-lo como um usuário não privilegiado. A razão para isso é que, se houver uma vulnerabilidade no jekyll que, de alguma forma, permita a execução de comandos (possivelmente por meio do código que está analisando), o invasor não precisará fazer mais nada para possuir o seu sistema completamente. Se, por outro lado, ele for executado como um usuário não privilegiado, o invasor poderá causar tanto dano quanto esse usuário e deve agora tentar obter privilégios de root para possuir completamente o seu sistema. Ele simplesmente adiciona uma camada extra que os atacantes devem seguir.
Você pode simplesmente executá-lo como o mesmo usuário que está executando seu servidor da Web, mas isso deixa você aberto a outro possível ataque. Se houver uma vulnerabilidade no servidor da web que permita ao usuário manipular arquivos no sistema, eles poderão modificar os arquivos html gerados ou, pior ainda, os arquivos de origem e fazer com que o servidor atenda o que quiser. No entanto, se os arquivos gerados e os arquivos de origem forem legíveis apenas pelo servidor da web e graváveis como outro usuário não privilegiado, eles não poderão modificá-los com facilidade, atacando o servidor da web.
No entanto, se você estiver simplesmente servindo arquivos estáticos desse servidor e manter o servidor atualizado, esses ataques serão muito improváveis - mas ainda possíveis. É de sua responsabilidade avaliar os riscos versus a sobrecarga de configurá-lo com base no quão crítico é o seu sistema, mas essas duas dicas são muito simples de configurar e quase sem sobrecarga de manutenção.
Type=forking
. Além disso, ele não será executadoexecStart
como uma expansão do shell, de modo que&
no final nunca será entendido como um sinalizador de segundo plano.