카테고리 Archives: linux

cron 삭제 대비한 systemd 를 이용한 타이머 설정

일반적으로 crontab -l 를 이용하여 서버의 스케쥴링을 설정 한다.
Amazon linux 2023 에서는 cronie 가 삭제되었고 당연히 crontab 명령어를 사용할 수 없다. (뭐 설치한다면 사용할 수 있다 -.-a)
그래서 systemd 에서 제공하는 타이머 형태로 사용할 수 있다.

1. crontab -l 과 대응 되는 명령어는 systemctl list-timers 이다.

2. 기존에는 crontab 과 생성해둔 스크립트 조합으로 실행이 되었지만.
systemd 에서는 생성해둔 스크립트 + 서비스명.service + 서비스명.timer 조합으로 설정 할 수 있다.

아래는 간단한 timer 생성 예 이다.

아래는 스크립트를 실행하는 service 생성 예 이다. (Execstart= 에 생성 해둔 스크립트를 넣으면 해당 스크립트가 실행이 되겠다.)

스크립트, 타이머, 서비스 를 모두 생성 했다면 start 또는 enable 을 시켜서 작동을 확인한다.

RockyLinux 8 미사용 커널 삭제

Linux 상에서 dnf update 를 한  경우 보통은 새로운 업데이트 버전이 설치 되면서 기존 버전을 삭제 하게 되어있다.

다만 일반적인 범주를 벗어나는 java 라든가 python 은 기존 버전의 삭제 없이 다른 이름으로 설치 되어 alternatives에 의해 선택되어 사용 된다.

그리고 또 다른 하나의 경우는 kernel 이 업데이트 된 경우 인데 (8.5 -> 8.9) 이경우 /boot 파티션에 기존 부분 삭제없이 누적 되기 때문에

업데이트를 꾸준히 한경우 /boot 파티션의 용량이 부족한 경우가 발생한다.

 

요점은 /boot 폴더는 보통 용량이 작기 때문에 용량 확보를 위해서 기존 커널을 지워야 한다 ‘ ㅅ’a

손쉽게 삭제가 된다. 🙂

20240304_142946

OCI 구성 서버중 update를 많이 한 웹서버 용량이 73%를 쓰고 있어서 삭제 후 43% 으로 감소 하였음 :).

nginx 설정파일을 vim 으로 변경시 색상 표시

nginx 의 경우 vim 을 이용한 편집시 색상 표기가 되지 않아 눈에 잘 들어오지 않는다.

이는 vim 이 가지고 있는 syntax중 nginx 에 맞는 색상 코드가 존재 하지 않기 때문이고 이를 추가해 줄 경우

색상이 정상적으로 표시가 된다.

 

먼저 아래 와 같이 경로 이동 및 파일 다운로드를 진행한다. (경로 이동중 vim80 부분은 설치된 vim의 버전에 따라 변경 될 수 있다.)

 

이후 filetype.vim 에서 어떤 파일에 해당 syntax를 사용할지 설정해야 한다.

vi /usr/share/vim/vim80/filetype.vim 를 이용해 파일 편집을 진행 한다.

99번째 줄에 apache(httpd) 에 대한 설정이 있는데 그 아래 추가를 하고 저장 한다.

 

nginx.conf 를 vi 로 열었을때 아래와 같이 나온다면 잘 설정이 된것이다.

20240208_133533

 

출처: https://gist.github.com/ralavay/c4c7750795ccfd72c2db

ps. 출처에서는 vim.org 에서 다운받게 하였으나 다운로드 시 잘 안되는 경우가 발생했고, 일부 ssl 관련 설정을 추가해서 nginx.vim.tgz 에 담았음.

nginx 자동 리로드 스크립트

Let’s encrypt 가 snapd 를 이용하여 자동으로 갱신이 이루어 지지만 시작 시점의 인증서를 계속 가져 가기 때문에

nginx 재시작이 되지 않아서 인증서 만료 문제가 발생을 한다.

 

때문에 1일 이내의 갱신된 인증서(let’s encrypt)가 존재할 경우 nginx 를 reload 해서 적용이 되도록 한다.

 

이후 아래와 같이 crontab 에 등록한다.

 

nginx 리버스 프록시 웹서버에 awstats 설치 및 운영

WAS 기능이 없는 리버스 프록시 서버에서 awstats 를 설치를 하게 될경우 php 가 설치되어 있지 않기 때문에 오류가 발생 한다.

perl 은 설치가 되어 있기 때문에 awstats 배포 판의 받아 perl이 일정 시간 마다 html 문서를 일정 시간마다 갱신하도록 해서 사용 한다.

 

먼저 배포파일을 다운로드 받아 서버에 업로드 한다. https://awstats.sourceforge.io/#DOWNLOAD

 

awstats 플러그인중 3가지를 사용한다. 구글챠트API 는 별도 설치가 없다.

URI utf8 디코딩 및 geoip2 (.mmdb 파일) 사용을 위해 아래 방법 대로 설치 한다.

(perl-App-cpanminus 와 GeoIP2::Database::Reader 설치 할때 각각 약 100개 정도가 설치 된다.)

 

그 다음 awstats 의 콘피그를 실행 한다.

위 코드중 강조된 부분 은 문답 부분이며 사용하려는 사이트에 맞게 입력 값이 달라 질수 있다.

 

콘피그가 완료 되면 /etc/awstats/awstats.www.enteroa.com.conf 파일이 생성 된다.

해당 파일의 내용을 아래와 같이 수정 한다. (일부 기본적인 설정만 사용하도록 했음.)

 

분석 과 html 문서 서비스 제공에 필요한 폴더 를 생성하고 심볼릭링크를 생성한다.

 

아래 명령으로 access_log 를 분석 한다.

 

아래 명령으로 html 파일을 생성 한다.

 

새롭게 생성한 폴더에 웹접근이 가능하도록 selinux (fcontext) 설정을 한다.

 

nginx 에 http(:80) 가상호스트를 생성 한다.

 

Let’s encrypt 인증서를 생성 한다.

 

https(:443) 가상 호스트 설정을 추가 한다.

 

수집된 정보로 html을 계속 생성해줘야 하기 때문에 위의 html 생성 명령어를 스크립트로 작성 한다.

 

crontab -e 명령어로 일정 시간 마다 스크립트가 자동 실행 되도록 한다.

access_log 분석: 10분마다 || html 파일 생성: 매시 59분 마다.

 

분석 텀은 자유롭게 설정가능 하지만 할때 마다 자원을 소모 한다. 1분 마다 하면 문제 소지가 있겠다.

다만 분석 텀을 너무 길게 하면 분석할 데이터의 량이 증가 하기 작동 시간이 길이져 서버의 로드애버리지는 상승 시키는 문제가 생긴다.

때문에 웹서버 접속량에 따라 유동적으로 설정해야 한다.


PS. 기본적으로 awstats 의 경우 검색 엔진을 외국산은 잘 표현 하지만 국산 검색 포털은 표현해 주지 않는다.

이는 기본 제공 되는 브라우져 체크 라이브러리 파일에 /usr/local/awstats/wwwroot/cgi-bin/lib/search_engines.pm  한국의 검색 엔진이 없기 때문에…

한국 검색엔진은 기타에 포함 된다.

 

개인적으로 수정해서 쓰고 있는 search_engines.pm 파일을 아래 방법 대로 다운받아서 대체 하면 나온다. ‘ㅅ’a (naver, daum, nate, dreamwiz, korea.com)