Funciona perfeitamente através da linha de comando, não funcionará através do systemd ExecStart

1

Instalei o servidor de terminal HTTP da borboleta , escrito em python, na minha máquina Arch . Sou novo no systemd, mas estou tendo um problema com um dos parâmetros da linha de comando.

/usr/bin/butterfly.server.py --shell=/usr/fish --unsecure --host="0.0.0.0"

Isso funciona como esperado e eu posso acessar o terminal através de um navegador da Web em outra máquina.

No entanto, quando criei um simples systemd .service para ele:

[Unit]
Description=Butterfly Terminal Server

[Service]
ExecStart=/usr/bin/butterfly.server.py --shell=/bin/fish --host="0.0.0.0" --unsecure

[Install]
WantedBy=multi-user.target

Ele não será iniciado com --host="0.0.0.0" na linha ExecStart e reportará:

[root@ArchHP sockets.target.wants]# systemctl status butterfly.service -l
● butterfly.service - Butterfly Terminal Server
   Loaded: loaded (/usr/lib/systemd/system/butterfly.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Wed 2015-01-07 23:08:29 CST; 26s ago
  Process: 3203 ExecStart=/usr/bin/butterfly.server.py --shell=/bin/fish --host="0.0.0.0" --unsecure (code=exited, status=1/FAILURE)
 Main PID: 3203 (code=exited, status=1/FAILURE)

Jan 07 23:08:28 ArchHP butterfly.server.py[3203]: File "/usr/lib/python3.4/site-packages/tornado/tcpserver.py", line 125, in listen
Jan 07 23:08:28 ArchHP butterfly.server.py[3203]: sockets = bind_sockets(port, address=address)
Jan 07 23:08:28 ArchHP butterfly.server.py[3203]: File "/usr/lib/python3.4/site-packages/tornado/netutil.py", line 106, in bind_sockets
Jan 07 23:08:28 ArchHP butterfly.server.py[3203]: 0, flags)):
Jan 07 23:08:28 ArchHP butterfly.server.py[3203]: File "/usr/lib/python3.4/socket.py", line 530, in getaddrinfo
Jan 07 23:08:28 ArchHP butterfly.server.py[3203]: for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
Jan 07 23:08:28 ArchHP butterfly.server.py[3203]: socket.gaierror: [Errno -2] Name or service not known
Jan 07 23:08:29 ArchHP systemd[1]: butterfly.service: main process exited, code=exited, status=1/FAILURE
Jan 07 23:08:29 ArchHP systemd[1]: Unit butterfly.service entered failed state.
Jan 07 23:08:29 ArchHP systemd[1]: butterfly.service failed.

Se eu remover o --host="0.0.0.0" , ele será iniciado com êxito, mas só estará acessível na minha máquina local - outros computadores não terão acesso. Em seguida, tentei criar um butterfly.socket para o serviço, mas não tive sucesso em procurar a mensagem de erro.

Por que executá-lo através do ExecStart é diferente de executá-lo em uma linha de comando e como faço para iniciá-lo com esse parâmetro? Como último recurso, posso tentar modificar o script python para, em vez disso, usar como padrão 0.0.0.0 , mas gostaria de entender por que estou obtendo o erro com sudo systemctl restart butterfly.service , mas não quando estou executando diretamente.

    
por Ehryk 08.01.2015 / 06:16

2 respostas

3

Quando você inicia o butterfly a partir do shell, ele remove aspas em torno de 0.0.0.0 . Por outro lado, o systemd não cota expansão nesta situação, porque não é um shell.

Na verdade, o systemd é capaz de remover aspas ao redor dos argumentos, mas não no meio delas.

Portanto, tente remover as cotações em torno de 0.0.0.0 no seu arquivo de serviço e veja o que muda. Não esqueça de systemctl daemon-reload .

p. S .: Você não pode magicamente ativar um soquete do daemon apenas escrevendo uma unidade de socket. Seu código deve ser alterado para suportar a ativação do soquete.

    
por 08.01.2015 / 09:40
0

Eu acho que você tem algumas dependências para executar o seu butterfly.service . Enquanto a execução da linha de comando pode ser todos os serviços estão acima e você não está enfrentando qualquer problema, mas ao iniciar a systemd pode ser alguma da dependência os serviços não estão ativos e antes que os serviços your butterfly.service estejam chegando. Tente adicionar Restart=always à sua seção [service] , para que, caso ocorra um erro, ele seja reiniciado novamente.

    
por 08.01.2015 / 06:52