Systemd: canaliza a entrada para o servidor daemon?

1

Portanto, tenho um servidor que posso executar a partir de um terminal bash usando, por exemplo,

java -jar spigot.jar

que enviará a saída para stdout (acredito) e, portanto, será impressa na tela do terminal. Para parar o servidor a partir do terminal, basta enviar o comando "stop" para o servidor, momento em que o servidor inicia o desligamento (salva os dados atuais, etc.).

No entanto, eu não quero ter que iniciar o servidor toda vez que eu reiniciar, ou ter um terminal extra bash rodando com o processo aberto, então eu tenho tentado configurar um serviço systemd para executar o servidor automaticamente, e pegue a entrada padrão de (qualquer lugar, na verdade), usando um arquivo .service como o seguinte:

[Unit]
Description=Spigot Minecraft server daemon

[Service]
Restart=always
WorkingDirectory=*location where spigot.jar is*

StandardInput=tty
TTYPath=/dev/tty2

ExecStart=/usr/bin/java -jar spigot.jar
ExecStop=/bin/sh -c 'echo stop >/dev/tty2'

[Install]
WantedBy=multi-user.target

Mas não consigo entender por que isso não funciona. O que eu pensei que deveria fazer é canalizar / dev / tty2 para o servidor, e quando eu uso o comando

systemctl stop *service*

deve enviar "stop" (indiretamente através de / dev / tty2) para o servidor. O que estou perdendo?

Mas o serviço não parece rodar? Se eu comentar o StandardInput & Linhas TTYPath, o servidor é iniciado, mas ao emitir

systemctl stop *service*

e, em seguida, revendo os logs do servidor por meio de

journalctl -u *service*

a sequência de desligamento adequada nunca iniciada - o processo acabou de ser morto (em vez de parar com calma).

Então, o que eu quero saber é: como eu executo este servidor como um serviço, com algum FIFO / file / tty / alguma coisa inserido nele (então eu ainda posso emitir comandos do servidor)?

    
por Joshua Voskamp 14.07.2016 / 15:02

1 resposta

1

Eu estou supondo que você está tentando demais. A maneira padrão de desligar um serviço é enviar um sinal SIGTERM (educado) ou um sinal SIGKILL (com força). Acredito que esse seja o comportamento systemd padrão. Portanto, tente remover todas essas linhas do arquivo systemd unit:

StandardInput=tty
TTYPath=/dev/tty2
ExecStop=/bin/sh -c 'echo stop >/dev/tty2'

Existem muitas referências no site Spogit para usar o SIGTERM e o SIGKILL

    
por 14.07.2016 / 15:50

Tags