[EC2]systemd를 이용해서 재부팅했을 때 실행하기

코드왕·2025년 1월 1일
  1. 서비스 파일 생성
sudo nano /etc/systemd/system/mainpy.service
  1. 서비스 파일 내용 작성:
[Unit]
Description=Run main.py at startup
After=network.target

[Service]
ExecStart=/usr/bin/python3 -u /home/ubuntu/main.py
WorkingDirectory=/home/ubuntu
Restart=always
StandardOutput=file:/home/ubuntu/main.log
StandardError=file:/home/ubuntu/main.err
User=ubuntu

[Install]
WantedBy=multi-user.target

Ctrl+O 눌렀다가 엔터 눌러서 저장하고
Ctrl+X 눌러서 나가자

  1. 서비스 리로드
sudo systemctl daemon-reload //서비스 리로드

sudo systemctl start mainpy.service // 서비스 시작

sudo systemctl enable mainpy.service //서비스 활성화(재부팅 시 자동 실행):

sudo systemctl status mainpy.service // 서비스 상태확인
  1. 서비스 확인
sudo reboot

cat /home/ubuntu/main.log //실행됐는지 로그 확인

sudo systemctl status mainpy.service //서비스 상태확인

  1. 가상 환경을 쓴 경우...
sudo nano /etc/systemd/system/mainpy.service
[Unit]
Description=Run main.py at startup
After=network.target

[Service]
ExecStart=/home/ubuntu/myenv/bin/python /home/ubuntu/main.py
WorkingDirectory=/home/ubuntu
Restart=always
StandardOutput=append:/home/ubuntu/main.log
StandardError=append:/home/ubuntu/main.err
User=ubuntu
Environment=PATH=/home/ubuntu/myenv/bin:/usr/bin:/bin
Environment=VIRTUAL_ENV=/home/ubuntu/myenv

[Install]
WantedBy=multi-user.target
  1. 파일 권한 확인
chmod +x /home/ubuntu/main.py
  1. 서비스 반영
sudo systemctl daemon-reload
sudo systemctl enable mainpy.service
sudo systemctl start mainpy.service
sudo systemctl status mainpy.service

4.로그 확인

cat /home/ubuntu/main.log
cat /home/ubuntu/main.err

6.서비스 중지관련

  1. 서비스 이름 확인
    bashsudo systemctl list-units --type=service | grep -i main
    또는
    bashsudo systemctl status | grep -i python
  2. 서비스 중지
    서비스 이름을 알고 있다면:
    bashsudo systemctl stop [서비스이름]
    예를 들어 서비스 이름이 main.service라면:
    bashsudo systemctl stop main.service
  3. 확인
    bashsudo systemctl status [서비스이름]
  4. 부팅 시 자동 시작도 비활성화하려면
    bashsudo systemctl disable [서비스이름]
    서비스 이름을 모르는 경우:
    bashps aux | grep main.py
    로 프로세스를 찾아서 PID를 확인한 후:
    bashsudo kill [PID]
profile
CODE DIVE!

0개의 댓글