Linux

Systemd에서 Idle 상태이면 자동으로 종료하기

chbae 2024. 6. 21. 05:14
728x90

회사에서 AWS를 사용하고 있고 개발자들에게 자유롭게 EC2 Instance Type을 선택하고 사용할 수 있도록 제공한다. 자유롭게 사용할 수 있는 만큼 책임이 따르지만 많이들 좋은 Instance Type을 선택하고 빌드가 아닌 작은 작업을 한다던지 심지어 깜빡하고 종료를 안하고 퇴근하기도 한다.

 

이에 사용하지 않을때 자동으로 종료하는 방법을 찾아서 설정하고 두가지 방안을 동시에 적용하려고 한다. 하나는 이번 글에서 설명할 systemd 설정을 변경하여 30분동안 idle 상태이면 자동으로 종료하도록 하는 것이고, 다른 하나는 AWS의 cloudwatch에서 alert를 설정하여 종료를 하도록 하는 것이다.

systemd 환경설정 방법

설정방법은 간단하다. /etc/systemd/logind.conf 파일에서 아래와 같이 두 줄 주석을 풀고

  • IdelAction=ignore 에서 ignore부분을 poweroff로 변경한다. 그리고 아래 두 명령어를 각각 실행한다.
  • $ sudo systemctl daemon-reload
  • $ sudo systemctl restart systemd-logind.service

systemd에서 Idle 상태를 판단하는 기준

systemd가 유휴(idle) 상태를 판단하는 기준은 systemd-logind 서비스에서 관리된다. 구체적인 기준은 다음과 같다:

 

1. 사용자 활동 모니터링: systemd-logind는 사용자 세션에서 키보드 입력, 마우스 움직임 등의 활동을 모니터링한다. 사용자의 입력이 없는 상태가 일정 시간 지속되면 이를 유휴 상태로 간주한다.

 

2. 로그인 세션 정보: loginctl 명령어를 통해 세션의 유휴 상태를 확인할 수 있다. IdleHint 속성이 yes로 설정되면 해당 세션이 유휴 상태임을 나타낸다.

$ loginctl show-session <세션 ID>

 

3. IdleAction 설정: /etc/systemd/logind.conf 파일의 IdleAction 및 IdleActionSec 설정을 통해 유휴 상태로 간주되는 시간을 정의할 수 있다.

[Login]
IdleAction=ignore  # 유휴 상태에서의 동작 (예: ignore, lock, poweroff 등)
IdleActionSec=30min  # 유휴 상태로 간주될 시간 (30분)

 

4. 세션별 유휴 상태 확인: 세션의 유휴 상태는 IdleSinceHint 및 IdleSinceHintMonotonic 속성을 통해 확인할 수 있다. 이는 해당 세션이 마지막으로 활동한 시점부터 경과한 시간을 나타낸다.

$ loginctl show-session <세션 ID> -p IdleSinceHint -p IdleSinceHintMonotonic

 

5. 유휴 감지와 관련된 로그 확인: 유휴 상태 감지와 관련된 로그는 journalctl 명령어를 통해 확인할 수 있다. 예를 들어, systemd-logind 서비스와 관련된 로그를 확인하려면 다음 명령어를 사용한다.

$ journalctl -u systemd-logind

 

다음글에서는 AWS의 cloudwatch를 설정하여 idle 상태에서 종료하는 방법을 알아본다.