루나의 TIL 기술 블로그

크론탭 (정해진 요일, 정해진 시간에 실행)

|

목적

크론탭은 정해진 스케줄에 파일이 실행되도록 해주는 기능이다.

crontab -e 명령어로 크론탭 실행명령어를 저장한다.

*/10 * * * * docker exec user python /home/ubuntu/app/batch/v3_1/batch_reserve_publish.py > /home/ubuntu/workspace/user/src/log/batch_reserve_publish_log.log 2>&1
#10분마다 계속 실행

0-59 9-23 * * 1-5 docker exec create_engine_v2 python /home/ubuntu/app/process_tool/v3_1/realtime/idea_update_period.py
#9시부터 11시까지 월-금 매분 실행

# target_accuracy
0 8 30 * * 2-6 docker exec user python /home/ubuntu/app/batch/v3_2/batch_price_accuracy.py > /home/ubuntu/app/batch/v3_2/batch_price_accuracy.log 2>&1
#화-토 매일 8시30분에 실행

https://crontab.guru/ 에 들어가면 크론탭 명령어를 가장 쉽게 뽑아낼 수 있다.

api 사용 화면

crontab -l 로 크론탭 파일상태를 확인할 수 있다.

슬랙봇을 붙여넣으면 파일이 돌아가고 있는 현황을 업데이트받을 수 있어서 편리하다.

예시:

import pymysql
from datetime             import datetime
from config.config_db     import DataBaseConfig as con_DB
from configuration        import server_name, send_slack

def delete_temp(conn, now):
    cursor = conn.cursor(pymysql.cursors.DictCursor)
    sql = f"""
        update db_community.tb_board_draft
           set del_yn = 1, del_dt = '{now}'
         where reg_dt < DATE_ADD('{now}', INTERVAL -60 DAY)
    """
    affected_rows = cursor.execute(sql)

    assert affected_rows != -1, '쿼리 실행에 실패하였습니다'

    if affected_rows != 0:
        send_slack(f' 60일 지난 임시저장 게시글 {affected_rows}개가 삭제되었습니다 \n',
                   f' tangopick_{server_name}_temp')
    else:
        send_slack(f' 삭제한 임시저장 글이 없습니다 \n',
                   f' tangopick_{server_name}_temp')


if __name__ == '__main__':
    conn = pymysql.connect(**con_DB.tangopick_db_config(read=False)[0])

    now = datetime.now()
    now_str = now.strftime('%Y-%m-%d %H:%M:00')
    now = datetime.strptime(now_str, '%Y-%m-%d %H:%M:00')

    delete_temp(conn, now)
    conn.commit()
    conn.close()