[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-linux-kak-zapustit-java-prilozhenie-kak-systemd-servis":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},1007,"kak-zapustit-java-prilozhenie-kak-systemd-servis",18,"linux","Linux","🐧","Как запустить Java-приложение как systemd-сервис?","Создание systemd-сервиса позволяет Java-приложению запускаться автоматически при загрузке, перезапускаться при сбоях и управляться стандартными инструментами.\n\n### Шаг 1. Подготовка\n\n```bash\n# Создать пользователя для приложения (без оболочки)\nsudo useradd -r -s \u002Fusr\u002Fsbin\u002Fnologin appuser\n\n# Создать каталог и скопировать приложение\nsudo mkdir -p \u002Fopt\u002Fmyapp\nsudo cp application.jar \u002Fopt\u002Fmyapp\u002F\n\n# Установить права\nsudo chown -R appuser:appuser \u002Fopt\u002Fmyapp\n```\n\n### Шаг 2. Создание unit-файла\n\n\u003Cdetails>\n\u003Csummary>Полный unit-файл \u002Fetc\u002Fsystemd\u002Fsystem\u002Fmyapp.service\u003C\u002Fsummary>\n\n```ini\n[Unit]\nDescription=My Spring Boot Application\nDocumentation=https:\u002F\u002Fexample.com\nAfter=network.target postgresql.service\nWants=postgresql.service\n\n[Service]\nType=simple\nUser=appuser\nGroup=appuser\nWorkingDirectory=\u002Fopt\u002Fmyapp\n\n# Файл с переменными окружения\nEnvironmentFile=\u002Fopt\u002Fmyapp\u002F.env\n\n# Команда запуска\nExecStart=\u002Fusr\u002Fbin\u002Fjava ${JAVA_OPTS} -jar \u002Fopt\u002Fmyapp\u002Fapplication.jar\n\n# Корректная остановка (SIGTERM -> Spring Boot graceful shutdown)\nExecStop=\u002Fbin\u002Fkill -SIGTERM $MAINPID\nSuccessExitStatus=143\n\n# Перезапуск при сбоях\nRestart=on-failure\nRestartSec=10\n\n# Таймауты\nTimeoutStartSec=60\nTimeoutStopSec=30\n\n# Логирование в journald\nStandardOutput=journal\nStandardError=journal\nSyslogIdentifier=myapp\n\n# Безопасность\nNoNewPrivileges=true\nProtectSystem=strict\nProtectHome=true\nReadWritePaths=\u002Fopt\u002Fmyapp\u002Flogs\n\n[Install]\nWantedBy=multi-user.target\n```\n\n\u003C\u002Fdetails>\n\n### Шаг 3. Запуск и управление\n\n```bash\nsudo systemctl daemon-reload      # Перечитать конфигурацию systemd\nsudo systemctl start myapp        # Запустить\nsudo systemctl status myapp       # Проверить статус\njournalctl -u myapp -f            # Посмотреть логи\nsudo systemctl enable myapp       # Включить автозапуск\n```\n\n### Ключевые параметры\n\n- `SuccessExitStatus=143` — код 143 = 128 + 15 (SIGTERM). Spring Boot завершается с этим кодом при корректной остановке. Без этого systemd считает это ошибкой\n- `Restart=on-failure` — перезапуск только при аварийном завершении (не при `systemctl stop`)\n- `ProtectSystem=strict` — файловая система только для чтения, кроме `ReadWritePaths`\n- `NoNewPrivileges=true` — процесс не может повысить привилегии\n\n> **На собеседовании:** это практический вопрос, который показывает опыт деплоя. Ключевое — знать `SuccessExitStatus=143` и `Restart=on-failure`. Частая ошибка — запускать приложение от root или забыть `daemon-reload` после изменения unit-файла.","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":19,"featuredSnippetReady":22},"Как запустить Java-приложение как systemd-сервис? — Gymterview","Создание systemd-сервиса позволяет Java-приложению запускаться автоматически при загрузке, перезапускаться при сбоях и управляться стандартными инструментами.","Создание systemd-сервиса позволяет Java-приложению запускаться автоматически при загрузке, перезапускаться при сбоях и у",[7,13],true]