Provavelmente você não queira usar screen
para daemonizar dentro de systemd
porque systemd
pressupõe certas coisas sobre como um processo funciona, particularmente no modo oneshot
. Na systemd.service(5)
documentação :
Behavior of oneshot
is similar to simple
; however, it is expected that
the process has to exit before systemd starts follow-up units.
RemainAfterExit=
is particularly useful for this type of service. This
is the implied default if neither Type=
nor ExecStart=
are specified.
Seu processo não está saindo imediatamente, então oneshot
não é o comportamento correto a ser pesquisado.
Olhando para bigly --help
:
usage: [options] [torrent [torrent ...]]
-h,--help Show this help.
-u,--ui <uis> Run <uis>. ',' separated list of user interfaces to run
(swt, console, telnet). The first one given will respond
to requests without determinable source UI (e.g. further
torrents added via command line).
--closedown shutdown an existing instance of BiglyBT
--shutdown shutdown an existing instance of BiglyBT
--open show the BiglyBT interface
--share share a resource
O Big é capaz de iniciar no modo telnet, que deve ser bom o suficiente para rodar como seu próprio daemon sem qualquer ajuda extra; Em seguida, ele pode falar com uma instância em execução para enviar um comando de desligamento usando --shutdown
. Levando isso em conta, podemos executar o serviço no modo simple
(excluí referências de caminho de classe e opções de linha de comando que não precisavam ser executadas, então inclua-as novamente se você precisar delas):
bigly.service :
[Unit]
Description=BiglyBt daemon
After=network-online.target
[Service]
Type=simple
User=pi
ExecStart=/usr/bin/java -cp /home/pi/biglybt_stock/BiglyBT.jar -Djava.library.path=/home/pi/biglybt_stock -Dbiglybt.install.path=/home/pi/biglybt_stock -Dazureus.script=/home/pi/biglybt_stock/biglybt -Dazureus.config.path=/home/pi/.biglybt_stock com.biglybt.ui.Main --ui=telnet
#ExecStop=/usr/bin/java -cp /home/pi/biglybt_stock/BiglyBT.jar -Djava.library.path=/home/pi/biglybt_stock -Dbiglybt.install.path=/home/pi/biglybt_stock -Dazureus.script=/home/pi/biglybt_stock/biglybt -Dazureus.config.path=/home/pi/.biglybt_stock com.biglybt.ui.Main --shutdown
#SuccessExitStatus=143
ExecStop=/bin/sh -c "nc 127.0.0.1 57006 <<< 'quit iamsure'"
[Install]
WantedBy=multi-user.target
O processo sai com um código de saída de 143, então eu notei isso como a condição de sucesso para o serviço. Como --shutdown
parece não funcionar no modo telnet, eu usei o netcat para envie o comando quit para o servidor de telnet (a porta 57006 parece ser o padrão). Além disso, havia várias condições de erro na inicialização, mas eu estava tentando fazer o programa rodar, então ignorei.
A interface telnet se conecta a todas as interfaces, então você pode querer configurar uma regra de firewall para evitar conexões externas.