스프링 이유없이 죽는 이유
systemctl --user
도 linger 설정이 필요하다.
systemctl --user
를 사용하는 경우에도 linger 설정이 필요하다.
만약 ssh login 을 해서 서버를 띄운 후에 ssh세션을 모두 닫는다면 그 시점에 서버가 종료될 것이다.
sudo loginctl enable-linger <user_id>
현재 linger설정 상태를 확인하려면 아래와 같은 command를 치면 된다.
loginctl user-status <user_id>
$ loginctl user-status admin
admin (1000)
Since: Thu 2024-03-28 06:16:00 UTC; 4h 42min ago
State: active
Sessions: 642 *639
Linger: no
Unit: user-1000.slice
├─session-639.scope
│ ├─67433 sshd: admin [priv]
│ ├─67456 sshd: admin@pts/0
│ ├─67457 -bash
│ ├─67906 loginctl user-status admin
│ └─67907 pager
├─session-642.scope
│ ├─67469 sshd: admin [priv]
│ ├─67476 sshd: admin@notty
│ └─67477 /usr/lib/openssh/sftp-server
└─user@1000.service
├─app.slice
│ └─myserver.service
│ └─67481 /usr/bin/java -Dspring.profiles.active=prod -Xms512M -Xmx1G -XX:+UseZGC -jar /services/myserver/myserver-0.0.1-SNAPSHOT.jar
└─init.scope
├─67436 /lib/systemd/systemd --user
└─67437 (sd-pam)
개인적인 경험
처음에 systemctl --user
를 사용할 떄는 이것이 systemctl 과 같다고 봐서, daemon 으로 동작하기에 따로 nohup 등의 설정이 필요없다고 생각했다. 그래서 systemctl --user
를 이용해서 웹서버를 실행했었다.
하지만 이 서버가 종종 gracefully shutdown 으로 죽었다.(spring server 였다.) 당연히 웹서버(WAS) 로그에는 남아있는 것이 없었다.
원인을 찾다가 deamon.log
를 보게 되었다. 여기서 systemd가 stop 된 것을 보고 웹서버(WAS)가 죽은 이유를 추측해 볼 수 있었다. 그래서 결국 linger 설정이 필요한 것을 알았다.
cat /var/log/daemon.log | grep "Mar 28 06:12"
...
Mar 28 06:12:45 i-0127a77bf7ac67eaf systemd[1]: Stopping User Manager for UID 1000...
Mar 28 06:12:45 i-0127a77bf7ac67eaf systemd[104663]: Stopped target Main User Target.
Mar 28 06:12:45 i-0127a77bf7ac67eaf systemd[104663]: Stopping PMS api server(fish)...
댓글 없음:
댓글 쓰기