[네이버클라우드] AIaaS 개발자 과정/Linux

[네이버클라우드캠프] 2023.5.1 Linux(1) - log 관리, 예약작업(atd), 반복작업(crond)

_꼬마돌 2023. 5. 1. 09:24
반응형

시간순으로 정리하기 편하도록 쉘 프롬프트에 시간이 표시되도록 설정했다.

root@kwc19:11:54:~# vi .bashrc

 55     #PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
 56     PS1='${debian_chroot:+($debian_chroot)}\u@\h\t:\w\$ '
# 55번째 줄에 원래 있던 설정은 #을 넣어 주석처리하고 아래 같은 걸 복사해서 넣고 \t를 추가했다.

# 시간대를 한국으로 설정하기
timedatectl set-timezone "Asia/Seoul"   # 설정 후 date 입력해서 확인

리눅스에서 한국어로 메시지 뜨게 설정하기

 

현재 시스템에서 설정된 locale 정보 출력
root@kwc19:15:48:~# locale
LANG=ko_KR.UTF-8
LANGUAGE=
LC_CTYPE="ko_KR.UTF-8"
LC_NUMERIC="ko_KR.UTF-8"
LC_TIME="ko_KR.UTF-8"
LC_COLLATE="ko_KR.UTF-8"
LC_MONETARY="ko_KR.UTF-8"
LC_MESSAGES="ko_KR.UTF-8"
LC_PAPER="ko_KR.UTF-8"
LC_NAME="ko_KR.UTF-8"
LC_ADDRESS="ko_KR.UTF-8"
LC_TELEPHONE="ko_KR.UTF-8"
LC_MEASUREMENT="ko_KR.UTF-8"
LC_IDENTIFICATION="ko_KR.UTF-8"
LC_ALL=

현재 시스템에 설정된 언어 출력
root@kwc19:22:16:~# nl /etc/default/locale
     1  #LANG=en_US.UTF-8
     2  LANG=ko_KR.UTF-8

한글 언어팩 설치
root@kwc19:24:21:~# apt -y install language-pack-ko

시스템에 한글 locale 생성
root@kwc19:27:42:~# locale-gen ko_KR.UTF-8

아래 명령어 입력했을 때 언어가 바뀌어 있지 않을 수 있다.
root@kwc19:28:35:~# nl /etc/default/locale

그럼 아래 명령어로 직접 편집기에서 언어 설정을 변경할 수 있다.
root@kwc19:30:06:~# vi /etc/default/locate
LANG=ko_KR.UTF-8  #입력


root@kwc19:24:21:~# apt -y install language-pack-ko
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다... 완료
상태 정보를 읽는 중입니다... 완료
안내 메시지가 한글로 바뀌어 있는 것을 볼 수 있다.

log 관리

last 명령어

시스템에서 사용자들의 로그인 기록을 출력하는 명령어.
시스템 로그파일 (/var/log/auth.log')에서 로그인 기록을 읽어와서 출력한다.
보통 last 명령어는 root 권한으로 실행해야 로그인 기록을 볼 수 있다. 

last 명령어에 -n 옵션을 붙여 실행하면 최근 로그인 기록 중에서 얼마나 많은 항목을 출력할 지 지정할 수 있다.
예를 들어, last -n 5 명령어는 최근 5개의 로그인 기록만 출력한다.

 

/etc/logrotate.conf

logrotate 패키지 설정 파일이다. logrotate는 로그 파일의 크기를 제한하고 이전 로그 파일을 백업하고 압축하는 등의 작업을 수행하여 디스크 공간을 절약하는 유틸리티이다. 어떤 로그 파일을 로테이트 할 것인지, 로테이션 주기를 설정하고 압축 여부를 지정할 수 있고, 전체 시스템에 영향을 미치는 기본 설정을 정의할 수 있다. 

logrotate 구동순서

cron (주기적으로 반복되는 일을 자동으로 실행될 수 있도록 설정해 놓는 데몬)을 이용해 logrotate 실행.

crontab > cron.daily > logrotate > logrotate.conf > logrotate.d

logrotate 활용 예시

logrotate는 로그 파일의 크기 및 보존 기간을 관리하고 회전시켜주는 유틸리티이다. 
주기적으로 실행되며, 로그 파일의 크기나 나이 등을 확인하고 설정에 따라 해당 파일을 압축하거나 삭제하여 로그파일을 관리할 수있다.
1. 로그 파일이 있는 디렉토리에 logrotate.conf 파일 생성. (로그 파일을 관리하기 위한 설정 파일)
2. logrotate.conf 파일에서 로그 파일 관리에 필요한 설정을 추가. 아래는 예시-

/path/to/logfile.log {            #/path/to/logfile.log는 예시이다.
    weekly
    rotate 10
    compress
    delaycompress
    missingok
    notifempty
}

위 설정은 '/path/to/logfile.log' 파일을 일주일마다 백업하며, 최대 10개의 백업 파일을 유지하고
백업파일은 압축한다. 압축 후 기존 로그 파일은 삭제하지 않고 압축파일로 보관한다.

3. logrotate 명령어를 이용하여 로그 파일을 관리한다. 주기적으로 실행되어야 하므로, cron을 이용하여
   주기적으로 실행도도록 설정한다.
  
예를 들어, 매일 자정에 logrotate가 실행되도록 하려면, cron 설정 파일에 다음과 같이 추가한다.

0 0 * * * /usr/sbin/logrotate /path/to/logrotate.conf

위 설정은 매일 자정에 /path/to/logrotate.conf 파일을 이용하여 logrotate 명령어를 실행한다.

예약작업 (atd), 반복작업 (crond)

atd (예약작업), at, atq, atrm

# at <시간> 의 형식으로 설정할 수 있다.
# atq, at -l 명령어로 예약되어 있는 작업들의 목록을 볼 수 있다.
# atrm, at -d 명령어로 에약되어 있는 작업을 삭제할 수 있다.
/etc/at.allow (기본적으로 없다)
at 사용을 허용할 사용자의 목록을 지정하는 파일.
이 파일이 존재하면, at 명령어를 사용할 수 있는 사용자는 이 파일에 명시된 사용자들로 제한된다.
따라서 이 파일이 존재하면, 이 파일에 명시된 사용자 외에는 at 명령어를 사용할 수 없다.
만약 이 파일이 존재하지 않으면, /etc/at.deny 파일에 명시된 사용자를 제외한 모든 사용자가 at 명령어를 사용할 수 있다.

/etc/at.deny
at 사용을 금지할 사용자의 목록을 지정하는 파일.
이 파일이 존재하면, 파일에 명시된 사용자는 at 명령어를 사용하여 작업 예약을 할 수 없다.
만약 /etc/at.allow 파일이 존재하면, 이 파일은 무시된다.
반대로 /etc/at.allow 파일이 존재하지 않는다면, at 명령어를 실행할 수 있는 사용자는 모든 사용자가 된다.

만약 두 파일 모두 존재하지 않으면 모든 사용자가 실행 가능하다.
/etc/at.deny 파일을 이용하는 것이 편리하다.
----------------------

그 날의 특정 시간에 작업을 수행하기 위해 HH:MM 형식으로 시간을 지정한다.
(이미 시간이 지났다면 다음날 그 시간)
midnight (24:00), noon(12:00), teatime(4pm) 문자와 아침과 저녁을 나타내기 위해 AM, PM과 같은 접미사를 사용.

작업을 수행할 날짜에 대해서
month-name day year 형식으로 지정하거나 MMDDYY 또는 MM/DD/YY 또는 DD.MM.YY 형식으로 지정.
날짜 지정은 반드시 시간 지정 다음에 나와야 한다.

시간을 now + count time-units 형식으로 지정할 수 있으며, 
time-units는 minutes, hours, days 또는 weeks 가 될 수 있다.
오늘 수행할 작업에는 today, 내일 수행할 작업에는 tomorrow를 붙일 수 있다.

예시)
지금부터 3일 후 오후 4시에 작업을 수행하려면 at 4pm + 3days
7월 31일 오전 10:00에 작업을 수행하려면 at 10am Jul 31
내일 오후 1시에 작업을 수행하려면 at 1pm tomorrow

 

crontab (반복작업)

# vi /etc/crontab

11 # Example of job definition:
12 # .---------------- minute (0 - 59)
13 # |  .------------- hour (0 - 23)
14 # |  |  .---------- day of month (1 - 31)
15 # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
16 # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
17 # |  |  |  |  |
18 # *  *  *  *  * user-name command to be executed

-------------------------------
각 별(*)들의 의미
     *                *                *              *            *
분(0-59)  시간(0-23)  일(1-31)  월(1-12)  요일(0-7)

 

crontab

/etc/cron.d
주기적인 작업을 등록하는 공간으로 사용한다.
임의의 사용자 권한으로 실행할 수있다.

cron의 사용자 제어
/etc/cron.deny, /etc/cron.allow 설정파일을 이용하여 사용자에 대한 crontab 제어

 

crontab 명령

# crontab -e  
edit, crontab 파일의 내용을 편집
# crontab -l
list, 현재 crontab 내용 표준 출력
# crontab -r
remove, 현재 crontab 내용 삭제
# crontab -u j
j 사용자의 작업내용을 보거나 편집, 삭제

 

crontab을 활용한 주기적 백업

현재 날짜를 년도-월-일 형식으로 today 변수에 저장하는 명령어
today=`date +%y%d%m`     

매일 오전 3시에 crontab 명령어 실행. 
00 3 * * * crontab -l > /backup/crontab_backup.&today

현재 사용자의 crontab을 백업 디렉토리인 /backup/crontab_backup/에 
"today" 변수를 사용하여 파일 이름을 지정하고 저장

 

crontab -e 설정하기

매분 마다 실행
* * * * * /root/day.sh

매분 마다 실행
* * * * * date >> ~/1date

특정 시간 실행 - 매주 토요일 오전 2시 30분
30 2 * * 6 /root/time2.sh

반복 - 매일 매시 10분, 30분, 50분
10,30,50 * * * * /root/time4.sh

범위 - 매일 3시부터 3시20분까지 매분
*/15 * * * * * /root/time5.sh

간격 - 매시 15분마다
*/15 * * * * * /root/time5.sh

반응형