# DJBank EAPIM Admin — user-scope systemd unit # # Install (one-time, on the host as `djb`): # sudo loginctl enable-linger djb # allow services to outlive ssh logout # mkdir -p ~/.config/systemd/user # # workflow copies this file in on each deploy; for first boot you can also do: # # cp /prod/.../deploy/systemd/eapim-admin.service ~/.config/systemd/user/ # systemctl --user daemon-reload # systemctl --user enable eapim-admin # systemctl --user start eapim-admin # # Why this exists: # - `catalina.sh start` + `nohup &` does NOT escape the Gitea Actions runner # process group. When the workflow step finishes, the runner sends SIGTERM # to the process tree and Tomcat dies seconds after boot. # - Running Tomcat as a systemd user service detaches lifecycle from the # runner entirely. The workflow just calls `systemctl --user restart` and # systemd owns the process. [Unit] Description=DJBank EAPIM Admin (Tomcat 9) After=network-online.target Wants=network-online.target [Service] Type=simple Environment=JAVA_HOME=/apps/opts/jdk17 Environment=CATALINA_BASE=/prod/eapim/adminportal Environment=CATALINA_HOME=/prod/eapim/apache-tomcat-9.0.116 Environment=CATALINA_PID=/prod/eapim/adminportal/temp/catalina.pid # `catalina.sh run` keeps Tomcat in the foreground so systemd can supervise it. ExecStart=/prod/eapim/apache-tomcat-9.0.116/bin/catalina.sh run # Graceful shutdown via Tomcat's shutdown port, 30s window. ExecStop=/prod/eapim/apache-tomcat-9.0.116/bin/catalina.sh stop 30 # Tomcat returns 143 on SIGTERM during normal stop — treat as success. SuccessExitStatus=143 TimeoutStartSec=180 TimeoutStopSec=60 Restart=on-failure RestartSec=10 # Memory / fd limits — adjust as needed. LimitNOFILE=65535 [Install] WantedBy=default.target