Se ejecuta perfectamente a través de la línea de comando, no funcionará a través de systemd ExecStart

Se ejecuta perfectamente a través de la línea de comando, no funcionará a través de systemd ExecStart

he instaladoServidor terminal http mariposa, escrito en Python, en mi máquina Arch. Soy nuevo en systemd, pero tengo un problema con uno de los parámetros de la línea de comando.

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

Esto funciona como se esperaba y puedo acceder al terminal a través de un navegador web en otra máquina.

Sin embargo, cuando creé un .servicio systemd simple para ello:

[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

No comenzará --host="0.0.0.0"en la línea ExecStart e informa:

[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.

Si luego elimino --host="0.0.0.0", se iniciará correctamente, pero solo será accesible en mi máquina local; no se concederá acceso a otras computadoras. Luego intenté crear un Butterfly.socket para el servicio, pero no tuve éxito al buscar el mensaje de error.

¿Por qué ejecutarlo a través de ExecStart es diferente a ejecutarlo en una línea de comando y cómo lo inicio con ese parámetro? Como último recurso, puedo intentar modificar el script de Python para que tenga el valor predeterminado 0.0.0.0, pero me gustaría entender por qué recibo el error sudo systemctl restart butterfly.servicepero no cuando lo ejecuto directamente.

Respuesta1

Cuando inicias Butterfly desde Shell, se eliminan las comillas 0.0.0.0. Por otro lado, systemd no realiza expansión entre comillas en esta situación, porque no es un shell.

En realidad, systemd es capaz de eliminar comillas.alrededorargumentos, pero no en medio de ellos.

Por lo tanto, intente eliminar las comillas 0.0.0.0en su archivo de servicio y vea qué cambios. No olvides systemctl daemon-reload.

PD: No puedes hacer que un demonio se pueda activar mágicamente simplemente escribiendo una unidad .socket. Su código debe cambiarse para admitir la activación del socket.

Respuesta2

Supongo que tiene algunas dependencias para ejecutar su butterfly.service. Mientras se ejecuta desde la línea de comandos, es posible que todos los servicios estén activos y no enfrente ningún problema, pero al comenzar desde la línea de comandos, systemdes posible que algunos de los servicios de dependencia no estén activos y antes de que esos servicios your butterfly.serviceestén activos. próximamente. E intente agregar Restart=alwaysa su [service]sección para que, si falla, se reinicie nuevamente.

información relacionada