본문 바로가기
AWS

EC2에서 재부팅 시마다 스크립트 자동 실행하기

by ballena 2024. 1. 19.

EC2의 재부팅 자체는 자동으로 가능하지만, 재부팅 후 특정 프로세스의 실행이 다시 필요한 경우가 있습니다.

EC2를 처음 생성할 때에는 사용자 데이터 스크립트를 작성해 원하는 프로세스를 실행할 수 있지만, 사용자 데이터 스크립트는 재부팅 시에는 실행되지 않습니다.

 

사용자 데이터는 EC2 생성 시에 설정할 수 있지만, 아래와 같이 생성 뒤에도 수정이 가능합니다.

사용자 데이터 편집

 

단, 생성되어 있는 EC2의 사용자 데이터를 편집하려면 인스턴스를 잠시 중지해야 합니다.

그럼 설정을 통해 사용자 데이터 스크립트를 재부팅 시에도 실행될 수 있도록 수정해 보도록 하겠습니다.

 

EC2에 적용된 사용자 데이터

 

위 스크립트를 해석하면 아래와 같습니다.

# Content type이 multipart임을 의미하고, 아래 내용들을 "//"로 구분(boundary)하겠다는 의미입니다.
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
 
--//									# 여기까지 multipart 1번
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
 
#cloud-config
cloud_final_modules:					# user data를 언제 실행할지 설정하는 부분
- [scripts-user, always]				# always로 설정해 재부팅 시에도 실행
 
--//									# 여기까지 multipart 2번
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
 
# 여기부터는 실행 스크립트 정보입니다.
#!/bin/sh
 
# 서버 시작 시간을 변수에 저장합니다.
START_TIME=$(date)
 
# 서버 시작 시간을 출력합니다.
echo "Server started at $START_TIME" >> /home/ubuntu/userdata-test.txt
--//--									# 여기까지 multipart 3번(끝)

 

 

 

먼저 EC2 첫 생성 시 실행되었을 사용자 데이터의 결과를 확인하겠습니다.

EC2 첫 생성 시 실행된 사용자 데이터 스크립트 결과

 

다음은 EC2 재부팅 후 사용자 데이터 실행 결과를 확인하겠습니다.

재부팅 후 스크립트 실행 결과

 

만약 재부팅마다 실행되는 사용자 데이터를 다시 생성 시에만 실행되도록 하고 싶다면,

아래 명령어를 실행해 원래대로 되돌리면 됩니다.

# user-data.txt 초기화
cat /dev/null > /var/lib/cloud/instances/i-*/user-data.txt
 
# cloud-config.txt 초기화
cat /dev/null > /var/lib/cloud/instances/i-*/cloud-config.txt
 
# config_scripts_user.once 삭제
rm -rf /var/lib/cloud/sem/config_scripts_user.once

 

댓글