IT STUDY LOG

[리눅스 운영체제] 07. 서비스 관리 본문

devops bootcamp 4/서비스 운영 기초

[리눅스 운영체제] 07. 서비스 관리

roheerumi 2023. 3. 13. 11:46

# 학습 목표

  • 서비스 관리
    • 시스템 관리자가 하는 일을 이해할 수 있다.
    • 사용자 및 루트 권한에 대해 이해하고, 사용자 및 그룹 관리를 할 수있다.
    • 파일의 권한을 변경하고 관리할 수 있다.
    • 프로그램과 프로세스의 차이를 이해하고, 프로세스를 확인/종료할 수 있다.
    • 백그라운드 프로세스와 서비스를 이해하고, 관리할 수 있다.
    • cron 및 bash 스크립트를 이용해서 자동화를 할 수 있다.

 


# 학습 내용

1.  데몬과 서비스

  • 데몬과 서비스
    데몬 서비스
    - 리눅스 환경에서 시스템 초기화 후 init이라는 특별한 프로그램에 의해 자발적으로 백그라운드에서 실행하는 프로그램
    - 백그라운드에서 작동하는 프로세스라는 의미로 통용
    (ex) syslogd, httpd 처럼 프로그램 이름 끝에 d가 붙는 프로세스
    - 수행하는 일
     > 하드웨어 장치 관리
     > 보조 기억장치와 디렉토리 연결(마운트)
     > 네트워크를 통한 프로세스간 통신(소켓)
     > 애플리케이션 수준의 서비스 제공
    - 운영체제의 관점
    - 데몬의 역할 중 애플리케이션 수준의 서비스를 간략하게 지칭하는 것
    - 사용자의 관점
  • 대표적인 데몬의 예: 웹 서버 (httpd)
    • (실습) 간단한 HTML 파일을 만들어 웹서버에 띄워 crul이라는 유틸리티를 통해 해당 주소로 접속
# index.html 파일 생성
roheerumi@devops:~/devops$ echo "<html><body><h1>roheerumi test</h1></body></html>" > index.html

# 웹 서버 실행 후 8888 포트 오픈
roheerumi@devops:~/devops$ busybox httpd -h . -p 8888 # 각종 유틸리티를 담은 리눅스용 애플리케이션

# 웹 서버 접속
roheerumi@devops:~/devops$ curl http://localhost:8888
<html><body><h1>roheerumi test</h1></body></html>

# 프로세스 확인 명령으로 httpd 데몬 작동 여부 확인
roheerumi@devops:~/devops$ ps aux | grep httpd
roheeru+    3659  0.0  0.0   2428    72 ?        Ss   11:21   0:00 busybox httpd -h . -p 8888
roheeru+    3665  0.0  0.0  18992   712 pts/1    R+   11:21   0:00 grep --color=auto httpd

# PID로 해당 데몬 kill
roheerumi@devops:~/devops$ kill -9 3659

# 해당 웹서버 접속 실패
roheerumi@devops:~/devops$ curl http://localhost:8888
curl: (7) Failed to connect to localhost port 8888: 연결이 거부됨

 

2.  대표적인 데몬: cron

  • 대표적인 데몬의 예: cron 데몬
    • 스케쥴에 따라 백그라운드에서 작업을 실행하는 도구
    • 크론탭 사용 문법:
      사용법 의미
      분 / 시 / 일 / 월 / 요일 / 작업 - 분 : 0 ~ 59분로 표현
      - 시 : 0 ~ 23시로 표현
      - 일 : 1 ~ 31일로 표현
      - 월 : 1 ~ 12월로 표현
      - 요일 : 0(일요일) ~ 6(토요일)로 표현
       > * : 시간을 표현하는 각 필드들은 각각 *로 표현 가능하며 그럴 경우 모든 시간을 의미
       > /간격 : 매 간격을 표시
      - 작업: 지정된 시간에 수행할 작업을 절대 경로로 기술, 필요한 옵션 및 인수를 함께 나열
    • 예시
      사용 예시 의미
      0 1 * * * batch.sh 매일 01시에 batch.sh 실행
      0 8-10 * * * batch.sh 매일 08시 - 10시에 batch.sh 실행
      0 1,2,5 * * * batch.sh 매일 01, 02, 05시에 batch.sh 실행
      */5 * * * * batch.sh 매 5분 간격으로 batch.sh 실
    • (실습) 매 분마다 날짜와 시스템 가동 시간을 파일에 기록
# 크론탭에 스케쥴 등록
roheerumi@devops:~/devops$ crontab -e # edit 크론탭 파일 수정
no crontab for roheerumi - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic
  3. /usr/bin/vim.tiny
  4. /bin/ed

Choose 1-4 [1]: 1 # nano 에디터로 등록

# 등록 내용 * * * * * echo $(/bin/date) - $(/usr/bin/uptime) >> ~/uptime.log

# 정상적으로 크론탭 등록
crontab: installing new crontab

# 로그 기록 중 확인
roheerumi@devops:~/devops$ cd ..
roheerumi@devops:~$ ls
devops  uptime.log  공개  다운로드  문서  바탕화면  비디오  사진  음악  템플릿
roheerumi@devops:~$ tail -f uptime.log 
2023. 03. 13. (월) 11:25:01 KST - 11:25:01 up 26 min, 1 user, load average: 0.06, 0.16, 0.18
2023. 03. 13. (월) 11:26:01 KST - 11:26:01 up 27 min, 1 user, load average: 0.02, 0.12, 0.17

# 등록한 크론탭 삭제
roheerumi@devops:~$ crontab -r # remove, 크론탭 삭제
roheerumi@devops:~$ crontab -l # list, 크론탭 확인
no crontab for roheerumi

 

3. 서비스 관리 (systemctl)  

  • systemctl
    • 모든 데몬의 목록을 확인할 수 있는 명령어
      사용 방법 의미
      systemctl --type=[타입명] --type=[타입명] : 해당 타입에 해당하는 서비스만 출력
      (ex) systemctl --type=service : 서비스 목록만 출력 
      systemctl list-unit-files 설치된 유닛(데몬) 출력
      systemctl enable 유닛명 부팅 시 유닛 활성화
      systemctl disable 유닛명 유닛이 부팅 시 비활성화
      systemctl start 유닛명 유닛을 즉시 활성화
      systemctl stop 유닛명 유닛을 즉시 비활성화
      systemctl restart 유닛명 유닛을 즉시 재시작
      systemctl status 유닛명 유닛의 상태, 최근 로그 조회
! Action Items !
Q. 로그에 따르면, 최근에 cron 데몬은 어떤 명령을 실행시켰나요? CMD (echo $(/bin/date) - $(/usr/bin/uptime) >> ~/uptime.log) 명령 실행

Q. 또한 서비스를 다시 실행하려면 어떤 명령을 사용해야 하나요?
# Q1. 크론 로그 확인
roheerumi@devops:~$ systemctl status -l cron # cron 데몬의 로그 확인
● cron.service - Regular background program processing daemon
     Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-03-13 10:58:50 KST; 42min ago
       Docs: man:cron(8)
   Main PID: 602 (cron)
      Tasks: 1 (limit: 4615)
     Memory: 500.0K
     CGroup: /system.slice/cron.service
             └─602 /usr/sbin/cron -f

 3월 13 11:25:01 devops CRON[3700]: (roheerumi) CMD (echo $(/bin/date) - $(/usr/bin/uptime) >> ~/uptime.log)
 3월 13 11:25:01 devops CRON[3699]: pam_unix(cron:session): session closed for user roheerumi
 3월 13 11:26:01 devops CRON[3736]: pam_unix(cron:session): session opened for user roheerumi by (uid=0)
 3월 13 11:26:01 devops CRON[3737]: (roheerumi) CMD (echo $(/bin/date) - $(/usr/bin/uptime) >> ~/uptime.log)
 3월 13 11:26:01 devops CRON[3736]: pam_unix(cron:session): session closed for user roheerumi
 3월 13 11:27:01 devops CRON[3766]: pam_unix(cron:session): session opened for user roheerumi by (uid=0)
 3월 13 11:27:01 devops CRON[3767]: (roheerumi) CMD (echo $(/bin/date) - $(/usr/bin/uptime) >> ~/uptime.log)
 3월 13 11:27:01 devops CRON[3766]: pam_unix(cron:session): session closed for user roheerumi
 3월 13 11:30:01 devops CRON[3811]: pam_unix(cron:session): session opened for user root by (uid=0)
 3월 13 11:30:01 devops CRON[3811]: pam_unix(cron:session): session closed for user root
 
 # 크론 재시작
roheerumi@devops:~$ systemctl restart cron
roheerumi@devops:~$ ps -ef | grep cron
root        4011       1  0 11:43 ?        00:00:00 /usr/sbin/cron -f
roheeru+    4014    1853  0 11:43 pts/1    00:00:00 grep --color=auto cron

# 크론 종료
roheerumi@devops:~$ systemctl stop cron
roheerumi@devops:~$ ps -ef | grep cron
roheeru+    4049    1853  0 11:45 pts/1    00:00:00 grep --color=auto cron
Comments