본문 바로가기
Ubuntu

Deamon 관리 (systemctl, journalctl)

by 너드나무 2022. 5. 9.
728x90

들어가며...

Ubuntu 서버에 프로그램을 Command 단위로 테스트를 진행하는 것 보다 Daemon 형태로 만들어서 로그 확인 등 테스트를 더욱 용이하게 만들어본다.

Daemon 생성

1. Daemon 스크립트 준비
# sudo vi /etc/systemd/system/{프로그램명}.service
[Unit]
Description=unicorn instance to backend # 설명부
After=network.target

[Service]
User=ubuntu	# 동작 권한 (유저)
Group=www-data # 동작 권한 (그룹)
# 작업 디렉토리
WorkingDirectory=/home/ubuntu/{프로젝트}/src
# 환경변수 설정
Environment="PATH=/home/ubuntu/{프로젝트}/bin"
# 실행 명령어
ExecStart=/home/ubuntu/{프로젝트}/bin/uvicorn main:app --workers 3 --reload --uds unix:backend.sock


[Install]
WantedBy=multi-user.target

2. Daemon 반영
# sudo systemctl daemon-reload

3. Daemon 관련 명령어
# sudo systemctl enable {프로그램명} (서버 재시작 시 실행)
# sudo systemctl disable {프로그램명} (서버 재시작 시 미실행)
# sudo systemctl start {프로그램명} (프로그램 시작)
# sudo systemctl stop {프로그램명} (프로그램 종료)
# sudo systemctl restart {프로그램명} (프로그램 재시작)

Daemon 관리 (systemctl status)

1. Daemon 상태 확인
# sudo systemctl status {프로그램명}
● {프로그램명}.service - unicorn instance to backend (설명부)
   Loaded: loaded (/etc/systemd/system/{프로그램명}.service; enabled; vendor preset:
   Active: active (running) since Wed 2022-04-27 16:46:30 KST; 1 weeks 5 days ag
 Main PID: 20583 (uvicorn)
    Tasks: 17 (limit: 4915)
   CGroup: /system.slice/{프로그램명}.service
           ├─20583 /home/ubuntu/{프로그램명}/bin/python3 /home/ubuntu/{프로그램명}/bin/uvi
           ├─20616 /home/ubuntu/{프로그램명}/bin/python3 -c from multiprocessing.sema
           └─25327 /home/ubuntu/{프로그램명}/bin/python3 -c from multiprocessing.spaw

# 로그 내역
May 09 18:27:02 {Server} uvicorn[20583]: 2022-05-09 18:27:02,883 INFO sql
May 09 18:27:02 {Server} uvicorn[20583]: INFO:     {IP}:0 - "GET
May 09 18:27:02 {Server} uvicorn[20583]: 2022-05-09 18:27:02,883 INFO sql
May 09 18:27:02 {Server} uvicorn[20583]: 2022-05-09 18:27:02,884 INFO sql
May 09 18:31:34 {Server} uvicorn[20583]: INFO:     {IP}:0 - "GET /
May 09 18:31:35 {Server} uvicorn[20583]: INFO:     {IP}:0 - "POST
May 09 18:31:36 {Server} uvicorn[20583]: INFO:     {IP}:0 - "GET /
  1. Daemon 상태를 파악하여 프로그램 실행 부분의 이슈를 파악할 수 있다. (loaded, failed 로그 확인)

Daemon 관리 (journalctl)

1. journalctl -u {프로그램명} | tail -n 3000
May 09 18:31:34 {Server} uvicorn[20583]: INFO:     20.109.4.50:0 - "GET /.env HTTP/1.0" 404 Not Found
May 09 18:31:35 {Server} uvicorn[20583]: INFO:     20.109.4.50:0 - "POST / HTTP/1.0" 404 Not Found
May 09 18:31:36 {Server} uvicorn[20583]: INFO:     20.109.4.50:0 - "GET /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.0" 404 Not Found
May 09 18:39:06 {Server} uvicorn[20583]: INFO:     45.9.20.101:0 - "GET /?XDEBUG_SESSION_START=phpstorm HTTP/1.0" 404 Not Found
May 09 18:48:38 {Server} uvicorn[20583]: INFO:     192.241.213.173:0 - "GET /actuator/health HTTP/1.0" 404 Not Found
May 09 19:00:48 {Server} uvicorn[20583]: INFO:     45.32.17.205:0 - "GET /api/v1/notices?page=1&per_page=1&thread_name=general HTTP/1.0" 404 Not Found
  1. Daemon 동작 시 프로그램 개발에 활용한 Logging 처리 내용을 파악할 수 있다. (내부 이슈 확인)
728x90
반응형

'Ubuntu' 카테고리의 다른 글

[Ubuntu] Nginx 웹서버 활용  (0) 2024.05.25
[certbot] SSL Certification 갱신 방법  (0) 2022.05.17