Tenemos un script systemd simple para iniciar un servidor MineCraft en forma de servicio. El SO es CentOS 7. Aquí el script:
[Unit]
Description=Minecraft Server
After=syslog.target network.target
[Service]
Type=simple
WorkingDirectory=/root/Minecraft
ExecStart=/bin/java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui
Restart=on-failure
[Install]
WantedBy=multi-user.target
Iniciar el servicio funciona bien, pero cuando se detiene, el servicio permanece en un estado fallido. Ver:
systemctl status minecraftd.service
minecraftd.service - Minecraft Server
Loaded: loaded (/usr/lib/systemd/system/minecraftd.service; disabled)
Active: active (running) since Mon 2015-06-01 16:00:12 UTC; 18s ago
Main PID: 20975 (java)
CGroup: /system.slice/minecraftd.service
└─20975 /bin/java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui
systemctl stop minecraftd.service
systemctl status minecraftd.service
minecraftd.service - Minecraft Server
Loaded: loaded (/usr/lib/systemd/system/minecraftd.service; disabled)
Active: failed (Result: exit-code) since Mon 2015-06-01 16:01:37 UTC; 3s ago
Process: 20975 ExecStart=/bin/java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui (code=exited, status=143)
Main PID: 20975 (code=exited, status=143)
¿Alguna idea?
Gracias
Para complementar la respuesta de Michael, el código de salida 143 es normal aquí, es la forma en que la VM Java recibió una señal SIGTERM, enviada por systemd para detener el proceso. La señal SIGTERM tiene un valor numérico de 15 (ver
man signal
).Ahora, de acuerdo con la especificación Posix, "El estado de salida de un comando que finalizó porque recibió una señal se informará como mayor que 128". ( http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_08_02 )
Aquí la máquina virtual Java agrega 128 + 15 y obtienes este código de salida de 143.
Este código de salida distinto de cero aquí tiene sentido, ya que permite ver que su programa java salió debido a una señal externa, y tiene la oportunidad de averiguar qué señal.
fuente