본문 바로가기

프로젝트 설정/기타

[ubuntu] 예약/반복 작업 (crontab/Shell Script) (ubuntu/Linux)

반응형

1. Shell Script 작성 (.sh)

  1. vim / vi / nano 등 본인이 편한 명령어를 통해 파일 생성 후 작성(수정)
    vim test.sh
  2. shell script 작성 / 저장
    #!/bin/bash
    
    #############################
    # testForCrontab.sh
    # author : ojava
    #############################
    
    #현재시각을 담아둘 변수
    nowdate=$(date +"%Y-%m-%d %H:%M:%S")
    
    # 텍스트와 crontab이 수행될 시각을 같이 표현해서 check_test라는 파일에 작성한다.
    echo "It is ${nowdate}, crontab test success." >> check_test
    
    # 실행할 application
    python3 /home/ubuntu/test.py
     
    1. #!/bin/bash
      shell을 실행시 기본 shell 설정 (안쓰면 기본 shell로 실행되는것으로 알고 있다.)
      bash dash(sh) 등등 실행할 shell을 설정해준다.
      이 shell 설정에 대한 이슈가 있을 수 있으니 아래 잡다한 에러를 참고하거나 검색해볼 것

    2.  # 주석
    3. 변수 선언이 가능하다.
    4. 실행할 명령어를 적어주면 실행한다. 여러줄이여도 상관 없다.
    5. 스크립트 작성시 안되는 경우
      • #! 이 안먹어서 안되는 경우
        직접 shell 경로를 찾아서 적어준다.
        https://24hours-beginner.tistory.com/184(잡다한 에러)
      • 실행하고자 하는 파일에서 다른 파일을 참조하고 있는데 참조 못 하는 경우
        cd로 실행하고자 하는 파일의 경로로 가는 명령어를 추가 한다.
        • 다른 파일을 참조하고 있는 python code
          import configparser
          
          parser = configparser.ConfigParser()
          parser.read('config.ini','UTF-8')
          
          AWS_DEFAULT_REGION = parser['DEFAULT']['AWS_DEFAULT_REGION']
        • error
          Traceback (most recent call last):
            File "./weatherCrawlerApp.py", line 1, in <module>
              import math, requests, database, time
            File "/home/ubuntu/database.py", line 5, in <module>
              from configSetting import dbconfig
            File "/home/ubuntu/configSetting.py", line 8, in <module>
              AWS_DEFAULT_REGION = parser['DEFAULT']['AWS_DEFAULT_REGION']
            File "/usr/lib/python3.6/configparser.py", line 1233, in __getitem__
              raise KeyError(key)
          KeyError: 'AWS_DEFAULT_REGION'​
        • 해결방법 
          # 원 script
          python3 /home/ubuntu/test.py
          
          # 수정 script
          cd /home/ubuntu/
          python3 test.py​
  3. script 실행 권한 설정 (안해주면 안될때 많음)
chmod +x filename

2. crontab 작성

  1. crontab -e 로 들어가서 crontab 문법에 맞추어 작성
    crontab 자세한 문법 설명은 다른곳에도 많기 때문에 skip

    crontab -e 수정/작성
    crontab -l 현재 로그인한 user의 cron 목록 조회
    crontab -r crontab 내용 삭제

    crontab -l > /home/bak/crontab_bak.txt 크론탭 내용 백업


  2. 기본 문법
    * * * * * /home/test.sh > /home/test.sh.log

    분(0-59) 시간(0-23) 일(1-31) 월(1-12) 요일(0-7) 실행 스크립트 설명
    * * * * * /home/test.sh 매분마다 실행
    0 * * * * /home/test.sh 매 시간 0분 정각에 실행
    0,30 * * * * /home/test.sh 매 0분,30분 정각에 실행
    0-30 * * * * /home/test.sh 매 0분부터 30분까지 매분 실행
    */10 * * * * /home/test.sh 매 10분마다 실행
    0 0 13 * 5 /home/test.sh 13일 금요일 0시 0분에 실행
    */20 0,12 12-14 * * /home/test.sh 12일부터 14일까지 0시와 12시 매 20분마다 실행
  3. Sample
# crontab backup 
50 23 * * * crontab -l > /home/bak/crontab_bak.txt

4. 설명

  1. * (asterisk) : 모든 값
    ex. 30 5 * * * 이라고 할 때, 해당 cron은 매일 5시 30분에 수행된다.
  2. , (comma) : 특정값 여러 개 지정
    ex. 0 7,9,12 * * *, 매일 7시 9시 12시 0분에 수행된다.
  3. / (slash) : 값을 특정 주기로 나눌 때 사용
    ex. */5 * * * *, 5분마다 수행해야 하는 경우
  4. - (dash) : 숫자 구간
    ex. 0 3 1-3 * *, 매달 1일부터 3일 사이의 3시 0분에 수행된다.

3. crontab 실행/재실행

  1. 작성 후 실행 및 재실행 주어야 한다.
  2.  
      ubuntu linux
    실행 service cron start service crond start
    재실행 service cron restart service crond restart
    중단 service cron stop service crond stop
  3. error
    ubuntu:~$ service cron restart
    ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
    Authentication is required to restart 'cron.service'.
    Authenticating as: Ubuntu (ubuntu)​
    나오면 sudo 붙이고 하자

4. log 보기

vim /var/log/syslog

5. 로그 경로 변경

5-1. /etc/rsyslog.d/50-default.conf 파일 변경

5-2. sudo service rsyslog restart

# /etc/rsyslog.d/50-default.conf
#  Default rules for rsyslog.
#
#                       For more information see rsyslog.conf(5) and /etc/rsyslog.conf

#
# First some standard log files.  Log by facility.
#
auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
cron.*                         /var/log/cron.log # 주석처리 제거 후 수정
#daemon.*                       -/var/log/daemon.log
kern.*                          -/var/log/kern.log
#lpr.*                          -/var/log/lpr.log
mail.*                          -/var/log/mail.log
#user.*                         -/var/log/user.log

#
# Logging for the mail system.  Split it up so that
# it is easy to write scripts to parse these files.
#
#mail.info                      -/var/log/mail.info
#mail.warn                      -/var/log/mail.warn
mail.err                        /var/log/mail.err

#
# Some "catch-all" log files.
#
#*.=debug;\
#       auth,authpriv.none;\
#       news.none;mail.none     -/var/log/debug
#*.=info;*.=notice;*.=warn;\
#       auth,authpriv.none;\
#       cron,daemon.none;\
#       mail,news.none          -/var/log/messages

#
# Emergencies are sent to everybody logged in.
#
*.emerg                         :omusrmsg:*

#
# I like to have messages displayed on the console, but only on a virtual
# console I usually leave idle.
#
#daemon,mail.*;\
#       news.=crit;news.=err;news.=notice;\
#       *.=debug;*.=info;\
#       *.=notice;*.=warn       /dev/tty8
~
~

 

https://24hours-beginner.tistory.com/184

 

[Linux] 예약/반복 작업 (crontab/script) + mysqldump

[crontab/script] 예약/반복 작업(db backup) 실행할 작업(스크립트를 생성) vim [name].sh #! bin/sh #! 스크립트를 실행할 때 dash쉘을 이용한다 cd ~/works/backup/ DATE=${date +%Y%m%d} # 지정 DB를 ${DATE}_..

24hours-beginner.tistory.com

https://twpower.github.io/131-simple-shell-script-syntax

 

[Shell Script] 간단한 쉘 스크립트 문법 정리와 예제

Practice makes perfect!

twpower.github.io

https://jdm.kr/blog/2

 

리눅스 크론탭(Linux Crontab) 사용법 :: JDM's Blog

* 이 포스팅은 네이버 블로그에서 작성(2013.04.01)한 내용을 옮겨온 것입니다. 오늘은 리눅스 크론탭에 대해 알아볼까 합니다. 음, 윈도우에서는 스케줄러와 비슷하다고 보면 되겠네요. "특정 시간

jdm.kr

https://ojava.tistory.com/154

 

[Linux] crontab 설정 및 로그 확인

crontab 설정 요청만 해봤지 이걸 내가 할 줄은 몰랐네 22222 까지만 쓰다가 케케묵은 작성중인 글로 남아있길래 완성시켜서 하나의 포스팅으로 작성하기 벌써 2021년이니까 재작년에 linux 설정을 위

ojava.tistory.com

https://windfree.tistory.com/40

 

리눅스 tail 명령어 [실시간으로 로그 보기]

리눅스오류나 파일의 로그를 보고 싶을 때 tail 명령어를 사용하여 실시간으로 확인한다. [TAIL 기능] 파일의 마지막 부분을 출력한다. [문법] tail [option] ... [file] ... 기본 출력은 파일의 마지막 10줄

windfree.tistory.com

 

반응형