프로젝트의 마무리 단계는 그동안 작성한 크롤링 코드와 메일 발송 메인 코드를 shell 스크립트로 실행하는 작업이었다.
- Shell : 운영체제에서 사용자가 입력하는 명령을 읽고 해석하여 실행해 주는 프로그램.
- Shell Script : Shell에서 사용할 수 있는 명령어들을 모아서 만든 파일로, Shell을 이용하여 명령어를 순차적으로 실행시켜주는 인터프리터이다.
출처: [Shell Script] 기초부터 시작하기 (1)
주로 이 Shell Script를 이용하여 자동화 작업을 실시했는데 주기를 설정하여 일정 주기마다 크롤링 코드 실행, 메일링 메인 파일 실행, 데이터 및 DB 백업의 업무를 자동화하도록 하였다.
Crontab 사용에서 가장 흔하게 발생하는 오류는 Shell Script 실행 권한 문제로 생성한 스크립트 파일은 실행 권한을 !반드시! 추가해야 정상적인 실행이 가능하다.
# 스크립트 파일 실행 권한 추가: chmod 명령어를 사용해 스크립트에 실행 권한 추가
chmod +x /home/ubuntu/backup_files/backup.sh
# 스크립트 파일 실행 권한 확인
ls -l /home/ubuntu/backup_files/backup.sh
권한 확인 시 정상적으로 실행 권한이 부여되었다면 다음과 같은 방식으로 출력이 나타나게 된다.
-rwxr-xr-x 1 ubuntu ubuntu #### Nov 21 10:00 /home/ubuntu/backup_files/backup.sh
이런식으로 실행 권한을 부여해주어야 정상적인 Crontab으로의 실행이 가능해진다!
실행 중인 모든 Shell Script에 실행 권한을 부여하고 자동화가 이루어지기를 기다리던 때.. Crontab이 자동으로 정해진 일정에 따라 실행되지 않고 있음을 발견하였다! 다시 한 번 실행 권한을 부여하고 서버도 리부트 해보고 도커도 내렸다 올려보고 다양한 방법을 시도해보았지만 이 문제는 해결하지는 못하였다.
그러다 구글링을 통해 일단 Crontab 로그부터 확인해보는 것이 좋다는 조언을 발견하여 Crontab로그를 확인해본 결과 다음과 같은 에러메시지를 확인할 수 있었다.
# Crontab 로그 확인
cat /var/log/syslog | grep CRON
붉은 색으로 Cron이라고 되어 있는 부분이 에러가 발생한 부분인데 메시지를 보면 'No MTA installed, discarding output' 으로 되어 있다.
이는 Crontab이 가지고 있는 기능으로 인해 발생한 에러였는데 Crontab은 실행 시에 MTA라는 메일 발송 관리자를 통해 실행 결과를 메일로 발생하는 기능을 가지고 있다! 그런데 이 MTA라는 메일 발송 관리자가 설치가 안되어 있다! 에러다! 라고 하는 것이다.. (나는 저 기능 1도 필요없는데...)
어쨌든 저 부분이 문제라고 하니 이를 해결해야 자동화가 이루어지고 프로젝트가 마무리될 수 있으니 어떻게든 해야했다. 다시 구글링을 해본 결과 Crontab이 원하는대로 MTA를 설치해주면 된다!는 해결방안을 발견하고 이를 실행에 옮겼다.
MTA를 설치하기 위해서는 단순하게 potfix를 설치하면 된다는 것을 발견하고 바로 코드를 실행시켰다.
$ sudo apt-get install postfix
위 코드를 실행하고 설치 승인 후 다음과 같은 화면을 마주할 수 있었다.
도대체 이 화면은 무엇인가.. 이게 리눅스 환경에서 마주할 수 있는 환경인가... 내가 뭘 눌러야 정상적인 설치가 가능한가.... 의 무한 굴레에서 결정을 내리지 못하고 회사 서버를 망칠까봐 두려웠던 나는 결국 postfix 설치를 포기했다. (나중에 안 사실인데 뭘 눌러도 사실 크게 상관은 없었던 듯. 당시 회사 서버가 아니라 로컬 환경에서 작업을 진행했으면 뭐라도 막 설치했을텐데..)
postfix 설치의 두려움을 뒤로 하고 새로 찾은 방법은 Crontab에서 자동으로 사용하고 있는 메일 전송 기능을 임의로 사용하지 않도록 설정하는 것이었다!(사실 실행 로그를 메일로 전송하는 기능이 전혀 필요 없었던 당시 상황에서는 이 편이 더 간편하긴 했다)
설정 방법은 단순하게 Crontab 명령 창에서 출력을 /dev/null로 리디렉션하면 되었다. Crontab 명령어를 설정할 때 맨 뒤에 /dev/null을 추가하여 출력을 무시하도록 하면 로그 파일 생성 뿐만 아니래 메일 전송도 이루어지지 않도록 할 수 있다.
.sh > /dev/null 2>&1
이런식으로 Crontab 명령어에서 자동으로 실행할 sh 파일 맨 뒤에 리디렉션 명령어를 추가해주었고 그 이후 다시는 MTA 문제는 발생하지 않았다!!!
두 번째 해결방법이 정확한 해결방법인지에 대해서는 확신할 수 없으나 그 당시에는 해당 방법으로 MTA 문제를 해결하였으니 혹시 비슷한 문제를 겪고 있는 사람이 있다면 조금이나마 도움이 되길 바랄 뿐이다😂