메뉴 건너뛰기

조회 수 154 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

crontab 명령어 사용 방법

$  crontab [ -u user ] [ -i ] { -e | -l | -r }
   -e (edit user's crontab)   # 예약 작업 추가 
   -l (list user's crontab)  # 예약 작업 리스트 확인 
   -r (delete user's crontab) # 예약 작업 삭제 
   -i (prompt before deleting user's crontab)


사용자 계정의 예약 명령어 사용 방법 

$ crontab -e   # 명령어 추가 

#Editor에서 양식으로 수행항 명령어를 작성합니다.  * 이 5개이고 각 항목은 분/시/일/월/요일입니다.  

 

* * * * *  수행할 명령어
┬ ┬ ┬ ┬ ┬
│ │ │ │ └─ 요일 (0 - 6) (0:일요일, 1:월요일, 2:화요일, …, 6:토요일)
│ │ │ └─ 월 (1 - 12)
│ │ └─일 (1 - 31)
│ └─ 시 (0 - 23)
└─ 분 (0 - 59)

 

* * * * * /root/backup.sh
→매분, 매시간, 매일, 매월, 매일, 즉 1분마다 /root/backup.sh를 실행


0 4 * * * /root/backup.sh
→0분, 4시, 매일, 매월, 매일, 즉 매일 4시에 /root/backup.sh를 실행


0 4 * * 1-5 /root/backup.sh
→0분, 4시, 매일, 매월, 월요일부터 금요일, 즉 평일 4시에 /root/backup.sh를 실행


*/10 4 * * * /root/backup.sh
→10분 간격, 4시, 매일, 매월, 매일, 즉 매일 4시, 4시 10분, 4시 20분, 4시 30분, 4시 40분, 4시 50분에 /root/backup.sh를 실행


0 */6 * * * /root/backup.sh
→6시간마다 /root/backup.sh를 실행

 

0 8 * * 1-5 /root/weekday.sh

평일(월요일~금요일) 08:00 에 /root/weekday.sh 실행

 

0 8 * * 0,6 /root/weekend.sh

→ 주말(일요일, 토요일) 08:00 에 /root/weekend.sh 실행

 

0 5 * * * /sbin/shutdown -r now
→ 매일 새벽 5시에 재부팅하기

 

 


Crontab 동작 확인

crontab 서비스 status 확인, 가동, 재가동

$ service cron status     # 동작 여부 확인

$ service cron start        # 가동
$ service cron restart   # 재가동

 

$ service cron status를 확인하면 아래와 같이 crontab 등록 결과를 보여줍니다.

● cron.service - Regular background program processing daemon
     Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-07-17 20:35:57 KST; 1h 1min ago
       Docs: man:cron(8)
   Main PID: 1148 (cron)
      Tasks: 1 (limit: 9363)
     Memory: 1.3M
     CGroup: /system.slice/cron.service
             └─1148 /usr/sbin/cron -f

 717 20:35:57 ubuntu-pc systemd[1]: Started Regular background program processing daemon.
 717 20:35:57 ubuntu-pc cron[1148]: (CRON) INFO (pidfile fd = 3)
 717 20:35:57 ubuntu-pc cron[1148]: (CRON) INFO (Running @reboot jobs)
 717 21:17:01 ubuntu-pc CRON[10107]: pam_unix(cron:session): session opened for user root by (uid=0)
 717 21:17:01 ubuntu-pc CRON[10116]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
 717 21:17:01 ubuntu-pc CRON[10107]: pam_unix(cron:session): session closed for user root
 717 21:30:01 ubuntu-pc CRON[10703]: pam_unix(cron:session): session opened for user root by (uid=0)
 717 21:30:01 ubuntu-pc CRON[10703]: pam_unix(cron:session): session closed for user root

 

Crontab 로그 확인 (디버깅에 필요)

$ cat /var/log/syslog | grep CRON

Jul 17 21:17:01 ubuntu-pc CRON[10116]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Jul 17 21:30:01 ubuntu-pc CRON[10704]: (root) CMD ([ -x /etc/init.d/anacron ] && if [ ! -d /run/systemd/system ]; then /usr/sbin/invoke-rc.d anacron start >/dev/null; fi)

로그 저장 script

crontab은 백그라운드로 실행되기 때문에 프로그램에서 출력하는 로그가 화면에 나오지 않아 로그로 저장해야 합니다. 

 

[test.sh]

#! /bin/bash --login

/kibua/crontabjoa.sh  2 > &1  | tee logfile.txt

 

#2>&1는  표준 출력에서 표준 에러(stderr)도 표준 출력(stdout)으로 보내는 명령어입니다. 표준 입출력은 여기를 참고하세요.

프로그램 동작 시 exception과 같은 에러는 stderr에 출력하기 때문에 디버깅을 하는 경우 2>&1을 꼭 추가하세요. 


 

시스템 레벨의 명령어 추가 방법

시스템 레벨에서 crontab 명령어는 /etc/crontab 에서 가능합니다.  /etc/crontab 파일의 내용을 보면 이미 cron.daily cron.weekly, cron.monthly가 실행되고 있습니다.  아주 특별한 일 아니면 앞에서 설명한 사용자 계정으로 등록하는 것이 안전합니다. 

 

$ vi /etc/crontab 

 

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )


관리자 권한으로 Crontab 추가 

sudo crontab -e

 

# 꼭 필요한 경우가 아니면 sudo 권한은 사용은 자제하고, 사용해야 하는 경우 Permission과 환경 변수를 체크해야 합니다.


주의해야 사항 

1. 실행 파일의 Permission 체크 

 다른 계정의 script을 접근하거나,   bash shell script 또는 python 파일을 바로 실행할 때 실행 권한이 반드시 있어야 합니다. 

     $ chmod 766 test.sh

 

2. 로그인 환경 변수 

crontab은  보안 이슈때문에   bashrc와 profile을 실행하지 않는다고 합니다. bashrc 파일에 export JAVA_HOME이나 특정 path를 환경 변수를 추가한 경우에는 주의해야 합니다.  각 계정의 환경 변수를 실행하는 방법은 bash 실행 시 --login 옵션을 추가하면 각 계정의 bashrc에서 정의한 환경 변수를 처리합니다.  참고로 로그인 셀 bashrc에 대한  참고 하세요. 링크

 

[test.sh]

#! /bin/bash --login

/kibua/crontab_job.sh 

 

3. 상대 경로보다는 절대 경로를 실행

bash script이나 python script에서 현재 경로를 얻어서 getcwd() 처리하고 상대 경로로 처리하는 경우 파일 경로 에러가 있을 수 있습니다.  script에서도 cd 명령어나 chdir 명령도 실행이 되기는 하지만 코드상에서 절대 경로 기준으로 코딩을 하는 경우 에러를 줄일 수 있습니다.

 


Python 파일을 crontab 등록

[crontab 등록]

$ crontab -e 

# vi editor에서 test.py 실행 

* * * * *  /home/your/path/test.py 2>&1  | tee logfile.txt

* * * * * python  /home/your/path/test2.py 2>&1  | tee logfile.txt

 

[test.py]

#!/usr/bin/python3    -     #Py 파일 최상단에 인터프리터가 지정되어 있어야 합니다.

# -*- coding: utf-8 -*-

print ('crontab test')


List of Articles
번호 제목 날짜 조회 수
237 split 명령어 (파일 나누기) 2021.03.26 76663
236 [CentOS 7] SSH 무작위 로그인 시도 막기 ( Fail2Ban ) 2018.03.28 69699
235 tomcat - server.xml 설정 file 2017.03.11 67354
234 리눅스서버 모니터링 rstatd 설치 2017.04.28 27358
233 fdisk로 파티션 삭제하기 2015.06.10 26031
232 fdisk로 파티션 삭제하기 2015.06.09 21723
231 CentOS6.6+httpd2.4.16+Mariadb10.0.20+php5.6.11 Source 설치.... file 2016.09.25 14746
230 bash 스크립트에서 네트워크 정보 확인하기 2014.02.27 14277
229 원격 접속 FreeNX (NOMACHINE) 설치/접속 (vnc 보다 훨 2014.02.27 12307
228 리눅스 읽기전용 파일시스템 / 파일 입/출력 오류 2016.07.22 12175
227 Centos7 64bit 웹서버 만들기-PHP설치 CAP5 file 2015.07.17 11979
226 php-5.2.17 make시에 오류 발생 make: *** [ext/dom/node.lo] 오류 1 2016.03.18 10745
225 이온큐브로더(ioncube) 설치 매뉴얼 2016.03.18 10391
224 CentOS 7 에 아파치(httpd) 설치 2015.07.16 10302
223 웹서버 모니터링 툴 awststs 2014.03.26 10265
222 파일 속성 명령어 : chattr, lsattr 2014.02.27 9618
221 libphp5.so: undefined symbol: unixd_config 2016.03.18 9576
220 iptable에서 TCP SYN Flooding 차단 설정 2014.02.27 9555
219 [CentOS 6.5] Tomcat 설치 및 구동 file 2017.03.11 9483
218 MySQL Linux Port 방화벽 설정(3306) file 2017.03.11 9468
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 12 Next
/ 12

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved