Unit-файл для Java (jar)
Подходит для Spring Boot и любого исполняемого jar.
[Unit]
Description=Java app
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=app
WorkingDirectory=/opt/app
Environment="JAVA_OPTS=-Xms256m -Xmx512m"
ExecStart=/usr/bin/java $JAVA_OPTS -jar /opt/app/app.jar
SuccessExitStatus=143
TimeoutStopSec=60
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
Почему SuccessExitStatus=143
При systemctl stop служба получает SIGTERM. JVM завершается корректно, но с кодом 143 (128 + 15). Без
SuccessExitStatus=143 systemd посчитает это ошибкой, и служба останется в состоянии failed после обычной остановки.
Память
JVM не знает про лимиты systemd. Если задать MemoryMax=, ставьте -Xmx заметно меньше: кроме кучи, Java тратит память
на метаданные классов, потоки и буферы. Иначе процесс убьёт OOM killer, а в статусе будет status=9/KILL.
Долгий запуск
Если приложение стартует дольше 90 секунд, а тип службы notify или forking, увеличьте TimeoutStartSec=.
При Type=simple systemd не ждёт готовности, и этот таймаут на запуск не влияет.