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)?