Programming/Bash Shell Script

[Bash Shell Script] 쉘 스크립트 라이센스 만료 날짜 관리 프로그램 만들기 (bash shell script license management)

Nirsa 2021. 6. 1. 16:55
반응형
  • 쉘 스크립트 라이센스 만료 날짜 관리 프로그램 만들기 (bash shell script license management)

업무에 필요한 라이센스 날짜를 관리해주는 프로그램 입니다. 사실 관리보다는 라이센스 만료일 전(아래 예시는 1달전과 일주일 전)에 라이센스 만료가 다가오고 있음을 경고 해주는 메일을 발송하는 스크립트 입니다.

테스트 환경은 다음과 같으며, sendmail 설치 및 설정이 되어있어야 합니다. (sendmail 구축 방법 링크는 추후 개시할 예정)

  • OS : CentOS 7.9 2009
  • Tools : sendmail-8.14.7-6.el7.x86_64
  • Linux 시간 설정이 재대로 되어 있는지 확인 필요

 

가장 먼저는 편한 위치에 아래와 같이 파일을 생성 합니다.

저는 /test/license/license 로 생성했다고 가정하에 진행 하겠습니다. 아래와 같이 "만료일 이름" 형식으로 파일을 생성 합니다.

# 만료일 이름
2021-07-01 인증서
2021-07-01 도메인
...

 

아래는 쉘 스크립트 파일 입니다. 주석으로 코멘트를 달아놓은 곳들만 설정 하시면 됩니다.

  • license_file 라인 : 저의 경우 /test/license/license가 될 것 입니다. 위에서 라이센스 파일을 생성한 경로에 따라 바뀔 수 있습니다.
  • from 라인 : 보낸 사람의 이메일 주소 입니다.
  • recipients 라인 : 받는 사람의 이메일 주소 입니다.
#!/bin/bash
today=$(date +%Y-%m-%d)
license_file="[LICENSE FILE PATH]"  ## ex) /home/test/license
licenses=`awk '{print $1}' $license_file` 

for license in ${licenses[@]}
do
        expiration_1month=`date -d "$license 1 month ago" "+%Y-%m-%d"`
        expiration_7day=`date -d "$license 7 day ago" "+%Y-%m-%d"`
        # expiration_test=`date -d "$expiration_1month 24 day ago" "+%Y-%m-%d"`
        
        if [[ $expiration_1month == $today ]]; then
                subject="[경고] 라이센스 만료 1달전"
                from="[FROM EMAIL ADDRESS]"        ## ex) no-reply@test.com
                recipients="[YOUR EMAIL ADDRESS]"  ## ex) id@gmail.com
               				 				 ## 여러명일 경우 id@naver.com,id@gmail.com 등과 같이 작성
                license_name=`cat $license_file | grep $license | awk '{print $2}'`
                
                /usr/sbin/sendmail "$recipients" <<EOF
subject:$subject
from:$from
$license_name 라이센스 만료일까지 1달 전 입니다.
만료일: $license
EOF

        elif [[ $expiration_7day == $today ]]; then
                subject="[경고] 라이센스 만료 7일 전"
                from="[FROM EMAIL ADDRESS]"        ## ex) no-reply@test.com
                recipients="[YOUR EMAIL ADDRESS]"  ## ex) id@gmail.com 
                license_name=`cat $license_file | grep $license | awk '{print $2}'`
                
                /usr/sbin/sendmail "$recipients" <<EOF
subject:$subject
from:$from
$license_name 라이센스 만료일까지 7일 전 입니다.
만료일: $license
EOF

        fi
done

 

expiration_test 변수를 통해 테스트를 진행해볼 수 있습니다. 조건이 발생할 수 있도록 적당한 값을 넣은 뒤, if문의 expiration_1month 또는 expiration_7day 변수를 expiration_test 변수로 변경해주면 됩니다. expiration_test 변수의 날짜만 잘 조정 했다면 정상적으로 메일이 오는것을 확인할 수 있습니다.

또는 license 파일에서 직접 날짜를 변경하여 실행해보고 잘 작동하는지 확인할 수 있습니다. 정상적으로 작동할 경우 아래와 같이 메일이 옵니다.

재대로 작동하는것까지 확인 했다면, 크론탭에 등록하여 사용 하시면 됩니다.

* 상황에 또는 사용하는 플랫폼에 따라 스팸 메일로 가거나, 차단되어 메일이 도착하지 않을 수 있습니다. 해당 부분은 상황에 맞춰 어떤 부분이 문제(화이트도메인이 아닌 경우 등)인지 확인하여야 합니다. 

 

반응형