SW/리눅스

Linux : Crontab으로 Cron Jobs 스케쥴링 방법, 예제, 명령어

얇은생각 2021. 4. 12. 07:30
반응형

Cron은 지정된 간격으로 작업을 실행하는 스케줄링 데몬입니다. 이러한 작업을 크론 작업이라고 하며 대부분 시스템 유지 관리 또는 관리를 자동화하는 데 사용됩니다. 

예를 들어 데이터베이스 또는 데이터 백업, 최신 보안 패치로 시스템 업데이트, 디스크 공간 사용 확인, 이메일 전송 등과 같은 반복 작업을 자동화하는 크론 작업을 설정할 수 있습니다.

크론 작업은 분, 시간, 월, 월, 요일 또는 이러한 조합으로 실행되도록 예약할 수 있습니다.

 

 

 

Crontab 파일

크론 탭(크론 테이블)은 크론 작업의 스케줄을 지정하는 텍스트 파일입니다. 크론 탭 파일에는 두 가지 유형이 있습니다. 시스템 전체 crontab 파일 및 개별 사용자 crontab 파일입니다.

사용자의 crontab 파일은 사용자 이름에 따라 이름이 지정되며 운영 체제에 따라 위치가 달라집니다. CentOS와 같은 Red Hat 기반 배포에서 crontab 파일은 /var/spool/cron 디렉토리에 저장되고, 데비안 및 Ubuntu 파일은 /var/spool/cron/crontabs 디렉토리에 저장됩니다.

사용자 crontab 파일을 수동으로 편집할 수 있지만 crontab 명령을 사용하는 것이 좋습니다.

/etc/crontab 파일 및 /etc/cron.d 디렉토리 내의 스크립트는 시스템 관리자만 편집할 수 있는 시스템 전체 crontab 파일입니다.

대부분의 Linux 배포에서는 /etc/cron 내부에 스크립트를 배치할 수도 있습니다.{directory, daily, weekly,weekly,weekly}개의 디렉토리와 스크립트는 매시간/일/주/월마다 실행됩니다.

 

 

 

크론 탭 구문 및 연산자

사용자 crontab 파일의 각 행에는 6개의 필드가 공백으로 구분되어 있고 그 뒤에 실행할 명령이 있습니다.

* * * * * command(s)
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

 

 

처음 5개 필드는 쉼표 또는 하이픈으로 구분된 값 범위로 구분된 하나 이상의 값을 포함할 수 있습니다.

* - 별표 연산자는 임의의 값 또는 항상을 의미합니다. 시간 필드에 별표 기호가 있으면 작업이 매시간 수행된다는 의미입니다.

, - 쉼표 연산자를 사용하면 반복할 값 목록을 지정할 수 있습니다. 예를 들어, 시간 필드에 1,3,5가 있는 경우 태스크는 오전 1시, 3시 및 5시에 실행됩니다.

- - 하이픈 연산자를 사용하면 값의 범위를 지정할 수 있습니다. 요일 필드에 1-5가 있는 경우 태스크는 매주 평일(월요일부터 금요일까지) 실행됩니다.

/ - 슬래시 연산자를 사용하면 슬래시 연산자 사이의 특정 간격 동안 반복될 값을 지정할 수 있습니다. 예를 들어, 시간 필드에 */4이 있으면 4시간마다 작업이 수행된다는 의미입니다. 이것은 0,4,8,12,16,20을 지정하는 것과 같습니다. 슬래시 연산자 앞에 별표 대신 값 범위를 사용할 수도 있습니다. 1-30/10은 1,11,21과 같은 의미입니다.

 

 

 

시스템 전체 크론 탭 파일

시스템 전체 crontab 파일의 구문은 사용자 crontabs와 약간 다릅니다. 여기에는 크론 작업을 실행할 사용자를 지정하는 추가 필수 사용자 필드가 포함됩니다.

* * * * * <username> command(s)

 

 

 

미리 정의된 매크로

공통 간격을 지정하는 데 사용되는 몇 가지 특별한 크론 스케줄 매크로가 있습니다. 이 바로 가기를 5열 날짜 지정 대신 사용할 수 있습니다. 

@yearly(또는 @yearly) - 1월 1일 자정(오전 12:00)에 지정된 작업을 1년에 한 번 실행합니다. 0 011과 같습니다.

@monthly - 매월 1일 자정(월 1일)에 지정된 태스크를 실행합니다. 01 * **과 동일합니다.

@weekly - 매주 일요일 자정마다 한 번씩 지정된 태스크를 실행합니다. 0 0 * * 0과 같습니다.

@daily - 지정된 작업을 하루에 한 번 자정에 실행합니다. 0 0 * * *와 같습니다.

@hourly - 지정된 작업을 한 시간에 한 번 시간 초에 실행합니다. 0 * * * * *와 같습니다.

@reboot - 시스템 시작 시(부팅 시간) 지정된 작업을 실행합니다.

 

 

 

Linux Crontab 명령

crontab 명령을 사용하면 편집할 crontab 파일을 설치, 확인 또는 열 수 있습니다.

crontab -e - crontab 파일을 편집하거나 파일이 없는 경우 파일을 만듭니다.

crontab -l - crontab 파일 내용을 표시합니다.

crontab -r - 현재 crontab 파일을 제거합니다.

crontab -i - 제거하기 전에 프롬프트를 사용하여 현재 crontab 파일을 제거합니다.

crontab - u <username> - 다른 사용자 crontab 파일을 편집합니다. 이 옵션을 사용하려면 시스템 관리자 권한이 필요합니다.

 

crontab 명령은 VISIC 또는 EDITER 환경 변수로 지정된 편집기를 사용하여 crontab 파일을 엽니다.

Linux : Crontab으로 Cron Jobs 스케쥴링 방법, 예제, 명령어

 

 

 

크론 탭 변수

크론 데몬은 자동으로 여러 환경 변수를 설정합니다.

 기본 경로는 PATH=/usr/bin:/bin으로 설정됩니다. 실행 중인 명령이 cron 지정된 경로에 없는 경우 명령의 절대 경로를 사용하거나 cron $PATH 변수를 변경할 수 있습니다. 일반 스크립트에서처럼 $PATH를 암시적으로 추가할 수 없습니다.

기본 셸은 /bin/sh로 설정됩니다. 다른 셸을 변경하려면 SHEL 변수를 사용합니다.

Cron은 사용자의 홈 디렉토리에서 명령을 호출합니다. 홈 변수는 크론 탭에서 설정할 수 있습니다.

전자 메일 통지가 크론 탭의 소유자에게 전송됩니다. 기본 동작을 덮어쓰려면 MAILTO 환경 변수를 전자 메일 알림을 수신할 모든 전자 메일 주소의 목록(쉼표로 구분)과 함께 사용할 수 있습니다. MAILTO가 정의되었지만 비어 있는 경우(MAILTO=") 메일은 전송되지 않습니다.

 

 

 

크론탭 제한사항

/etc/cron.deny 및 /etc/cron.allow 파일을 사용하면 crontab 명령에 액세스할 수 있는 사용자를 제어할 수 있습니다. 파일은 한 줄에 하나의 사용자 이름인 사용자 이름 목록으로 구성됩니다.

기본적으로 /etc/cron.deny 파일만 존재하고 비어 있으므로 모든 사용자가 crontab 명령을 사용할 수 있습니다. 특정 사용자에 대한 crontab 명령에 대한 액세스를 거부하려면 이 파일에 사용자 이름을 추가하십시오.

/etc/cron.allow 파일이 있는 경우 이 파일에 나열된 사용자만 crontab 명령을 사용할 수 있습니다.

두 파일이 모두 없는 경우 관리 권한이 있는 사용자만 crontab 명령을 사용할 수 있습니다.

 

 

 

크론 작업 예제

다음은 서로 다른 기간에 실행되도록 태스크를 예약하는 방법을 보여 주는 몇 가지 크론 작업 예입니다. 

월요일부터 금요일까지 매일 15:00에 명령을 실행합니다.

0 15 * * 1-5 command

 

 

 

5분마다 스크립트를 실행하고 표준 출력을 dev Null로 리디렉션하면 표준 오류만 지정된 전자 메일 주소로 전송됩니다.

MAILTO=email@example.com
*/5 * * * * /path/to/script.sh > /dev/null

 

 

매주 월요일 오후 3시에 두 개의 명령을 실행합니다(명령 간에 연산자 &&amp; 사용).

0 15 * * Mon command1 && command2

 

 

 

2분마다 PHP 스크립트를 실행하고 출력을 파일에 기록합니다.

*/2 * * * * /usr/bin/php /path/to/script.php >> /var/log/script.log

 

 

매일, 매시간, 매시간, 오전 8시부터 오후 4시까지 스크립트를 실행합니다.

00 08-16 * * * /path/to/script.sh

 

 

매월 첫째 주 월요일 아침 7시에 스크립트를 실행합니다.

0 7 1-7 * 1 /path/to/script.sh

 

 

매달 1일과 15일 오후 9시 15분에 스크립트를 실행합니다.

15 9 1,15 * * /path/to/script.sh

 

 

사용자 지정 HOME, PATH, SHEL 및 MAILTO 변수를 설정하고 매분 명령을 실행합니다.

HOME=/opt
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/usr/bin/zsh
MAILTO=email@example.com

*/1 * * * * command

 

반응형