프로그래밍

[Bitnmai ubuntu]쉘스크립트 작성 방법 및 HTTP API 호출 방법( crontab 등록 등)

공공데이터 포털의 api를 호출하여 데이터를 json타입으로 가져오는 서비스를 php로 구현 후 새벽에 서버 스케줄을 등록하여 동작하게 하기위해 작업을 진행한 기록을 남긴다.

스크립트 파일 생성 및 crontab 등록

  1. vi call_script.sh 명령어를 실행하여 파일을 생성한다.
  2. 아래 스크립트를 작성 후 저장한다
    • #!/bin/sh
    • curl -i https://test.com/api/stock/getKrxInfo.php
  3. 생성한 파일을 아래 명령어를 실행하여 실행할 수 있는 권한을 부여한다.
    • chmod +x call_script.sh 또는 chmod 755 call_script.sh
  4. 정상동작하는지 확인을 위해 스크립트를 실행한다.
    • ./call_script.sh
  5. crontab -e 명령어를 실행하여 작업을 등록한다.
    • 0 3 * * * /home/bitnami/call_script.sh
  6. 크론탭 설정 변경 내용을 반영하기위해 cron를 재시작명령어를 실행해준다.
    • sudo service cron restart : 재시작 명령어
    • sudo service cron start: 시작
    • sudo service cron stop: 중지
  7. 서버 스케줄이 정상적으로 동작하였는지 체크(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 형태로 입력하면 데이터 전달
-L3XX 응답이 오면 경로를 변경함.
-kSSL 검증없이 접근. –insecure와 동일.
-x프록시 설정
-v상세
-d/–data-binary텍스트를 그대로 전송
-T/–upload-file파일을 전송
–trace-ascii <파일명>curl로 송신한 정보, 수신한 정보를 파일로 저장
–retry재시도 횟수
–retry-max-time최대 재시도 시간
–retry-connrefusedconnection 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://wikidocs.net/48025

https://jdm.kr/blog/2

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설정

https://ojava.tistory.com/154

error: Content is protected !!