[Bitnmai ubuntu]쉘스크립트 작성 방법 및 HTTP API 호출 방법( crontab 등록 등)
공공데이터 포털의 api를 호출하여 데이터를 json타입으로 가져오는 서비스를 php로 구현 후 새벽에 서버 스케줄을 등록하여 동작하게 하기위해 작업을 진행한 기록을 남긴다.
스크립트 파일 생성 및 crontab 등록
- vi call_script.sh 명령어를 실행하여 파일을 생성한다.
- 아래 스크립트를 작성 후 저장한다
- #!/bin/sh
- curl -i https://test.com/api/stock/getKrxInfo.php
- 생성한 파일을 아래 명령어를 실행하여 실행할 수 있는 권한을 부여한다.
- chmod +x call_script.sh 또는 chmod 755 call_script.sh
- 정상동작하는지 확인을 위해 스크립트를 실행한다.
- ./call_script.sh
- crontab -e 명령어를 실행하여 작업을 등록한다.
0 3 * * * /home/bitnami/call_script.sh
- 크론탭 설정 변경 내용을 반영하기위해 cron를 재시작명령어를 실행해준다.
- sudo service cron restart : 재시작 명령어
- sudo service cron start: 시작
- sudo service cron stop: 중지
- 서버 스케줄이 정상적으로 동작하였는지 체크(ubuntu는 syslog에 cron 로그가 통합되어 기록됨)
- cat /var/log/syslog
서버 스케줄(crontab) 작업 등록
crontab -e 입력 후 다음과 같은 내용을 입력한다.
저장은 콜론 (:) 입력 후 wq 로 갱신한다.(vi에디터와 유사함)
사용자를 배려하기 위해 새벽 시간에 작업이 수행되도록 처리하자.
아래 처럼 매일 03:00에 /root/test.sh 실행하도록 등록하였다.
0 3 * * * /home/bitnami/call_script.sh
제대로 동작하는지 테스트를 위해 매분 마다 호출해자
* * * * * /home/bitnami/call_script.sh
혹시모를 상황에 대비하여 크론탭 스케줄을 아래 명령어를 실행하여 백업해두자.
crontab -l > crontab_bak.txt
현재 위 명령어를 실행하는 위치에 백업 텍스트 파일이 생성된다. 현재 실행되는 명령어의 위치는 pwd 명령어를 실행하여 확인할 수 있다.
curl 옵션 정리표
옵션 | 내용 |
---|---|
-o {파일명}, –ouutput {파일명} | 지정한 파일명으로 파일 다운로드 |
-O {경로} | 파일 이름으로 다운로드 |
-s | 추가 정보없이 처리 |
-I | 헤더 정보만 확인 |
-i | 헤더정보 확인 |
-H | 헤더 정보 전달 |
-G | 파라미터 전달 |
-X | 메소드 타입 설정(기본 GET), POST, DELETE 등 |
-d | 전달 데이터, POST 타입일 때 json 형태로 입력하면 데이터 전달 |
-L | 3XX 응답이 오면 경로를 변경함. |
-k | SSL 검증없이 접근. –insecure와 동일. |
-x | 프록시 설정 |
-v | 상세 |
-d/–data-binary | 텍스트를 그대로 전송 |
-T/–upload-file | 파일을 전송 |
–trace-ascii <파일명> | curl로 송신한 정보, 수신한 정보를 파일로 저장 |
–retry | 재시도 횟수 |
–retry-max-time | 최대 재시도 시간 |
–retry-connrefused | connection refused 오류도 재시도 |
–retry-all-errors | 모든 오류에 재시도 |
crontab 명령어
crontab -l
: 예약된 작업 리스트 확인crontab -e
: 작업 수정crontab -r
: 예약된 작업 삭제crontab -u 사용자명
: root관리자는 해당 사용자의 crontab 파일에 대한 읽기 수정 삭제 모두 가능
crontab -l 명령어를 수행해보니, ssl인증서 작업이 등록되어 있었네.
27 11 * * * sudo /opt/bitnami/letsencrypt/lego --path /opt/bitnami/letsencrypt --email="jxxxxxt2023
@gmail.com" --http --http-timeout 30 --http.webroot /opt/bitnami/apps/letsencrypt --domains=xxxx.com --user-agent bitnami-bncert/1.1.1 renew && sudo /opt/bitnami/apache/bin/httpd -f /opt/bitnam
i/apache/conf/httpd.conf -k graceful # bncert-autorenew
[참고자료]
https://inpa.tistory.com/entry/LINUX-쉘-프로그래밍-핵심-문법-총정리#
https://velog.io/@foqlzm12345/Bash-스크립트를-사용한-HTTP-API-호출-방법
https://skyblue-java.tistory.com/5
https://velog.io/@kero1004/linux-crontab설정