>  기사  >  운영 및 유지보수  >  Linux 예약 작업 Crontab 명령에 대한 자세한 설명

Linux 예약 작업 Crontab 명령에 대한 자세한 설명

小云云
小云云원래의
2018-03-21 11:27:302783검색

Linux 시스템은 cron(crond) 시스템 서비스에 의해 제어됩니다. Linux 시스템에는 계획된 작업이 많기 때문에 이 시스템 서비스가 기본적으로 시작됩니다. 또한 사용자가 예약된 작업을 직접 설정할 수도 있으므로 Linux 시스템에서는 사용자가 예약된 작업을 제어할 수 있는 명령인 crontab 명령도 제공합니다.

1. crond 소개

crond는 특정 작업을 주기적으로 수행하거나 특정 이벤트 처리를 기다리는 데 사용되는 데몬 프로세스입니다. Windows의 예약된 작업과 유사합니다. 기본적으로 설치됩니다. 이 서비스 도구를 설치하면 crond 프로세스가 자동으로 시작됩니다. crond 프로세스는 1분마다 실행할 작업이 있는지 정기적으로 확인하여 실행할 작업이 있으면 자동으로 실행됩니다.

Linux의 작업 스케줄링은 시스템 작업 스케줄링과 사용자 작업 스케줄링의 두 가지 범주로 나뉩니다.

시스템 작업 스케줄링: 캐시된 데이터를 하드 디스크에 쓰기, 로그 정리 등 시스템이 주기적으로 수행하는 작업입니다. /etc 디렉토리에는 시스템 작업 스케줄링을 위한 구성 파일인 crontab 파일이 있습니다.

/etc/crontab 파일에는 다음 줄이 포함됩니다.

cat /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO= HOME=/

# run-parts

51 * * * * 루트 실행 부분 /etc/cron.hourly

24 7 * * * 루트 실행 부분 /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

처음 네 줄은 crond 작업 실행을 위한 환경 변수를 구성하는 데 사용되며 첫 번째 줄은 다음을 지정합니다. 시스템이 사용해야 하는 SHELL 변수는 bash입니다. 두 번째 줄의 PATH 변수는 시스템이 명령을 실행할 경로를 지정합니다. 세 번째 줄의 MAILTO 변수는 crond 작업 실행 정보를 지정합니다. MAILTO 변수의 값이 비어 있으면 사용자에게 작업 실행 정보를 보내지 않는다는 의미입니다. 네 번째 줄의 HOME 변수는 명령이나 스크립트를 실행할 때 사용되는 홈 디렉터리를 지정합니다. 6~9행이 나타내는 의미는 다음 섹션에서 자세히 설명합니다. 여기서는 별로 할 말이 없습니다.

사용자 작업 예약: 사용자 데이터 백업, 정기 이메일 알림 등 사용자가 정기적으로 수행해야 하는 작업입니다. 사용자는 crontab 도구를 사용하여 자신의 예약된 작업을 사용자 정의할 수 있습니다. 모든 사용자 정의 crontab 파일은 /var/spool/cron 디렉토리에 저장됩니다. 파일 이름은 사용자 이름과 일치합니다.

사용자 권한 파일:

파일:

/etc/cron.deny

설명:

이 파일에 나열된 사용자는 crontab 명령을 사용할 수 없습니다.

파일:

/etc/cron.allow

설명:

이 파일에 나열된 사용자는 crontab 명령을 사용할 수 있습니다.

파일:

/var/spool/cron/

설명:

모든 사용자 crontab 파일이 저장되는 디렉터리의 이름은 다음과 같습니다. 사용자 이름

crontab 파일 의미:

사용자가 만든 crontab 파일에서 각 줄은 작업을 나타내고 각 줄의 각 필드는 설정을 나타냅니다. 해당 형식은 6개 필드로 나뉘며 처음 5개 세그먼트는 다음과 같습니다. 시간 설정 세그먼트 여섯 번째 세그먼트는 실행할 명령 세그먼트이며 형식은 다음과 같습니다.

분 시 일 월 주 명령

여기서:

분: 분을 나타내며 0에서 59까지의 정수일 수 있습니다.

hour: 시간을 나타내며 0에서 23 사이의 정수일 수 있습니다.

day: 날짜를 나타내며 1부터 31까지의 정수일 수 있습니다.

월: 월을 나타내며 1에서 12 사이의 정수일 수 있습니다.

week: 요일을 나타내며 0에서 7 사이의 정수일 수 있습니다. 여기서 0 또는 7은 일요일을 나타냅니다.

명령: 실행할 명령은 시스템 명령일 수도 있고 직접 작성한 스크립트 파일일 수도 있습니다.

위의 각 필드에는 다음 특수 문자를 사용할 수도 있습니다.

별표(*): 가능한 모든 값을 나타냅니다. 예를 들어 월 필드가 별표인 경우 제약 조건 뒤를 의미합니다. 다른 필드가 충족되는 경우 매달 이 명령을 실행합니다.

쉼표(,): 쉼표로 구분된 값을 사용하여 목록 범위를 지정할 수 있습니다(예: "1,2,5,7,8,9").

따라서(-): 하이픈을 사용할 수 있습니다. 정수 사이 정수 범위를 나타냅니다(예: "2-6"은 "2,3,4,5,6"을 의미).

슬래시(/): 슬래시를 사용하여 다음과 같이 시간 간격 빈도를 지정할 수 있습니다. "0-23/2 "는 2시간마다 실행된다는 의미입니다. 동시에 */10과 같이 별표와 함께 슬래시를 사용할 수 있습니다. 분 필드에 사용하면 10분마다 실행된다는 의미입니다.

2. Crond 서비스

crontab 설치:

yum install crontabs

서비스 운영 지침:

/sbin/service crond start //서비스 시작

/sbin/service crond stop //서비스 종료

/sbin /service crond restart //서비스 다시 시작

/sbin/service crond reload //구성 다시 로드

/sbin/service crond status //서비스 시작


crontab 서비스가 시작으로 설정되어 있는지 확인 부팅 시 다음 명령을 실행합니다:

ntsysv

부팅 시 자동 시작 추가:

chkconfig –level 35 crond on

3 crontab 명령에 대한 자세한 설명

1. 명령 형식:

crontab [-u 사용자] file

crontab [-u 사용자] [ -e | -l ]

2. 명령 기능:

crontab 명령을 통해 지정된 시스템 명령이나 쉘 스크립트를 고정된 간격으로 실행할 수 있습니다. 시간 간격의 단위는 분, 시간, 일, 월, 주 또는 위의 조합일 수 있습니다. 이 명령은 주기적인 로그 분석이나 데이터 백업 및 기타 작업에 매우 적합합니다.

3. 명령 매개변수:

-u user: 특정 사용자의 crontab 서비스를 설정하는 데 사용됩니다. 예를 들어 "-u ixdba"는 ixdba 사용자의 crontab 서비스 설정을 의미합니다. 이 매개변수는 일반적으로 루트 사용자가 실행합니다.

file: file은 명령 파일의 이름으로, file이 crontab의 작업 목록 파일로 사용되고 crontab에 로드된다는 의미입니다. 이 파일이 명령줄에 지정되지 않은 경우 crontab 명령은 표준 입력(키보드)에 입력된 명령을 받아들이고 이를 crontab에 로드합니다.

-e: 사용자의 crontab 파일 내용을 편집합니다. 사용자를 지정하지 않으면 현재 사용자의 crontab 파일을 편집한다는 의미입니다.

-l: 특정 사용자의 crontab 파일 내용을 표시합니다. 사용자를 지정하지 않으면 현재 사용자의 crontab 파일 내용을 표시합니다.

-r: /var/spool/cron 디렉터리에서 사용자의 crontab 파일을 삭제합니다. 사용자가 지정되지 않으면 기본적으로 현재 사용자의 crontab 파일이 삭제됩니다.

-i: 사용자의 crontab 파일을 삭제할 때 확인 메시지를 표시합니다.

4. 일반적으로 사용되는 방법:

1) 새 crontab 파일 만들기

cron 프로세스에 crontab 파일을 제출하기 전에 가장 먼저 해야 할 일은 환경 변수 EDITOR를 설정하는 것입니다. cron 프로세스는 이를 사용하여 crontab 파일을 편집하는 데 사용할 편집기를 결정합니다. 9 UNIX 및 LINUX 사용자의 9%가 vi를 사용합니다. 이 경우 $HOME 디렉토리에서 .프로필 파일을 편집하고 다음 줄을 추가합니다.

EDITOR=vi; 출구 . 라는 파일을 생성해 보세요. 여기서

# (여기에 자신의 이니셜 입력) 매

# 오후 6시에서 오전 6시 사이 15분마다 날짜를 에코하세요

0,15,30,45 18-06 * * * /bin/echo 'date' > dev/console

저장하고 종료하세요. 처음 5개 필드가 공백으로 구분되어 있는지 확인하세요.

위의 예에서 시스템은 15분마다 현재 시간을 콘솔에 출력합니다. 시스템이 충돌하거나 멈추는 경우 마지막으로 표시된 시간을 통해 시스템 작동이 중지된 시간을 한눈에 알 수 있습니다. 일부 시스템에서는 tty1이 콘솔을 나타내는 데 사용되며 위의 예는 실제 상황에 따라 적절하게 수정될 수 있습니다. 방금 생성한 crontab 파일을 제출하려면 새로 생성된 이 파일을 cron 명령의 인수로 전달할 수 있습니다.

$ crontab davecron

이제 파일이 cron 프로세스에 제출되었으므로 1마다 실행됩니다. 5분.

동시에 새로 생성된 파일의 복사본이 /var/spool/cron 디렉터리에 저장되었으며 파일 이름은 사용자 이름(예: dave)입니다.

2) crontab 파일 나열

crontab 파일을 나열하려면 다음을 사용할 수 있습니다.

$ crontab -l

0,15,30,45,18-06 * * * /bin/echo `date` > ; dev/tty1

위와 비슷한 내용이 표시됩니다. 이 방법을 사용하여 $H O ME 디렉터리에 crontab 파일을 백업할 수 있습니다:

$ crontab -l > $HOME/mycron

이 방법으로 실수로 crontab 파일을 삭제한 경우 다음 방법을 사용할 수 있습니다. 이전 섹션의 빠른 복구 방법에 설명되어 있습니다.

3) crontab 파일 편집

crontab 파일의 항목을 추가, 삭제 또는 편집하고 E D I TO R 환경 변수가 vi로 설정된 경우 vi를 사용하여 해당 crontab 파일을 편집할 수 있습니다. 명령은 다음과 같습니다.

$ crontab -e

crontab 파일을 수정하고 vi를 사용하여 다른 파일을 편집하는 것처럼 종료할 수 있습니다. 일부 항목이 수정되거나 새 항목이 추가되면 cron은 파일이 저장될 때 파일에 대해 필요한 무결성 검사를 수행합니다. 필드 중 하나에 허용된 범위를 벗어난 값이 있으면 메시지가 표시됩니다.

crontab 파일을 편집할 때 새 항목을 추가할 수 있습니다. 예를 들어 다음을 추가합니다.

# DT:delete core files, at 3.30am on 매달 1,7,14,21,26,26일

30 3 1,7,14,21,26 * * /bin/find -name “core' -exec rm {} ;

이제 저장하고 종료합니다. 기능, 실행 시간 등을 알 수 있도록 crontab 파일의 각 항목 위에 주석을 추가하는 것이 가장 좋습니다. 중요한 것은 이것이 어떤 사용자의 작업인지 아는 것입니다.

이제 앞서 언급한 crontab -l 명령을 사용하여 모든 정보를 나열해 보겠습니다.

$ crontab -l

# (crontab은 5월 4일 화요일 13:07:43에 설치되었습니다. 1999)

# DT: 30분마다 콘솔에 날짜를 보냅니다

0,15,30,45 18-06 * * * /bin/echo `date` > /dev/tty1

# DT: 삭제 코어 파일, 매월 1,7,14,21,26,26일 오전 3시 30분

30 3 1,7,14,21,26 * * /bin/find -name “core ' -exec rm { } ;

4) crontab 파일을 삭제하세요

crontab 파일을 삭제하려면 다음을 사용하세요.

$ crontab -r

5) 손실된 crontab 파일을 복원하세요

$H O M E 디렉토리에 백업이 아직 남아 있다고 가정하고 실수로 crontab 파일을 삭제한 경우 해당 파일을 /var/spool/cron/에 복사할 수 있습니다. 여기서 은 사용자 이름입니다. 권한 문제로 인해 복사를 완료할 수 없는 경우 다음을 사용할 수 있습니다.

$ crontab

여기서 은 $H O M E 디렉터리에 복사한 파일 이름입니다.

이 파일의 복사본을 $H O M E 디렉터리에 저장하는 것이 좋습니다. 비슷한 경험이 있었고 실수로 crontab 파일을 여러 번 삭제했습니다(r 키가 e 키 바로 오른쪽에 있기 때문입니다). 이것이 바로 일부 시스템 문서에서 crontab 파일을 직접 편집하지 말고 파일 사본을 편집한 다음 새 파일을 다시 제출하도록 권장하는 이유입니다.

일부 crontab 변형은 약간 이상하므로 crontab 명령을 사용할 때 특히 주의하세요. 옵션을 생략하면 crontab이 빈 파일을 열거나 빈 파일로 나타날 수 있습니다. 이때 삭제 키를 눌러 종료하세요. 를 누르지 마세요. 그렇지 않으면 crontab 파일이 손실됩니다.

5. 사용 예

인스턴스 1: 1분마다
명령 실행:
* * * * * command

인스턴스 2: 매 시간 3분과 15분에
명령 실행:
3,15 * * * * 명령

인스턴스 3: 오전 8시부터 오전 11시까지 3분과 15분에 실행
명령:
3,15 8-11 * * * command

인스턴스 4: 이틀에 한 번씩 오전 8시에 3분과 15분 11시까지
명령 실행:
3,15 8-11 */2 * * 명령

예 5: 매주 월요일 오전 8시부터 11시까지 3분과 15분
명령 실행 시간:
3,15 8-11 * * 명령 1개

인스턴스 6: 매일 밤 21:30에 smb 다시 시작
명령:
30 21 * * * /etc/init.d/smb restart


인스턴스 7: 다시 시작 매월 1일, 10일, 22일 4시 45분에 smb
명령:
45 4 1,10,22 * * /etc/init.d/smb restart


인스턴스 8: 매주 토요일, smb를 다시 시작 일요일 1:10
명령:
10 1 * * 6,0 /etc/init.d/smb restart


인스턴스 9: 매일 18:00부터 23:00 사이에 30분마다 smb를 다시 시작
명령:
0,30 18-23 * * * /etc/init.d/smb 재시작


인스턴스 10: 매주 토요일 오후 11시에 smb 재시작
명령:
0 23 * * 6 /etc/ init.d/smb restart


인스턴스 11: 매시간 smb를 다시 시작
명령:
* */1 * * * /etc/init.d/smb restart


인스턴스 12: 오후 11시 ~ 오전 7시 그 사이에 매시간 smb를 다시 시작
명령:
* 23-7/1 * * * /etc/init.d/smb restart

인스턴스 13: 매월 4일 및 매주 월요일~수요일 11시 smb 재시작
명령:
0 11 4 * mon -wed /etc/init.d/smb restart

예제 14: 1월 1일 4시에 smb 다시 시작
명령어:
0 4 1 jan * /etc/init .d/smb restart


예 15 : 매시간 /etc/cron.hourly 디렉터리에 있는 스크립트를 실행합니다.
명령:
01 * * * * root run-parts /etc/cron.hourly
지침:
run-parts 이 매개 변수를 제거하면 디렉토리 이름 대신 실행할 스크립트 이름을 써도 됩니다. 4. 사용상의 주의

환경 변수 문제에 주의하세요
가끔 crontab을 생성해 놓는 경우가 있는데, 이 작업은 자동으로 실행되지는 않지만 문제는 없습니다. 이 작업을 수동으로 실행할 때 이러한 상황은 일반적으로 crontab 파일에 환경 변수가 구성되어 있지 않기 때문에 발생합니다.

crontab 파일에 여러 스케줄링 작업을 정의할 때 특별한 주의가 필요한 문제 중 하나는 환경 변수 설정입니다. 작업을 수동으로 실행할 때는 현재 쉘 환경에서 수행하기 때문입니다. 물론 프로그램은 해당 작업을 찾을 수 있습니다. 환경 변수 시스템이 자동으로 작업 스케줄링을 수행할 때 어떠한 환경 변수도 로드하지 않으므로 작업 실행에 필요한 모든 환경 변수를 crontab 파일에 지정해야 합니다. 작업 스케줄링을 수행합니다.

크론이 필요한 특수 환경을 알고 있다고 가정하지 마세요. 그렇지 않습니다. 따라서 자동으로 설정된 일부 전역 변수를 제외하고는 쉘 스크립트에 필요한 모든 경로와 환경 변수를 제공해야 합니다. 따라서 다음 세 가지 사항에 주의하세요.

1) 스크립트에 파일 경로가 포함될 경우 전역 경로를 작성합니다.

2) 스크립트 실행에 Java 또는 기타 환경 변수가 필요한 경우 source 명령을 통해 환경 변수를 도입합니다. , 예:

cat start_cbp.sh

#!/bin/sh

source /etc/profile

export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf

/usr/local /jboss-4.0.5/bin/ run.sh -c mev &

3) 스크립트를 수동으로 실행하면 문제가 없지만 crontab이 실행되지 않습니다. 이때 환경변수가 원인이라고 과감하게 의심해야 하며, 문제 해결을 위해 crontab에서 환경변수를 직접 도입해 볼 수도 있습니다. 예:

0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh

각 작업 후에 시스템 사용자의 이메일 로그를 정리하세요. 시스템은 작업 출력 정보를 이메일을 통해 현재 시스템 사용자에게 보냅니다. 시간이 지남에 따라 로그 정보가 매우 커지고 시스템의 정상적인 작동에 영향을 미칠 수 있으므로 각각을 리디렉션하는 것이 매우 중요합니다. 일.

예를 들어 crontab 파일에서 다음 형식을 설정하여 로그 출력을 무시할 수 있습니다.

0 */3 * * * /usr/local/apache2/apachectl restart >/dev/null 2>&1

"/dev/null 2>&1"은 표준 출력을 먼저 /dev/null로 리디렉션한 다음 리디렉션하는 것을 의미합니다. 표준 오류가 표준 출력으로 리디렉션되었습니다. 표준 출력이 /dev/null로 리디렉션되었으므로 표준 오류도 /dev/null로 리디렉션되므로 로그 출력 문제가 해결됩니다.

시스템 수준 작업 예약 및 사용자 수준 작업 예약
시스템 수준 작업 예약은 주로 시스템의 일부 유지 관리 작업을 완료하고, 사용자 수준 작업 예약은 주로 일부 사용자 정의 작업을 완료할 수 있습니다. 시스템 수준 작업 예약에서는 완료되지만(권장되지 않음) 루트 사용자의 작업 예약 작업은 "crontab –uroot –e"를 통해 설정하거나 예약된 작업을 /etc에 직접 쓸 수 있습니다. /crontab 파일에서 시스템을 정기적으로 다시 시작하는 작업을 정의하려면 해당 작업을 /etc/crontab 파일에 넣어야 합니다. 유효하지 않은.

기타 참고사항
새로 생성된 크론 작업은 즉시 실행되지 않으며 실행하는 데 최소 2분 정도 소요됩니다. cron을 다시 시작하면 즉시 실행됩니다.

crontab이 갑자기 실패하면 /etc/init.d/crond restart를 시도하여 문제를 해결할 수 있습니다. 또는 작업이 실행되었거나 tail -f /var/log/cron 오류가 보고되었는지 로그를 확인하십시오.

무작위로 crontab -r을 실행하지 마세요. Crontab 디렉터리(/var/spool/cron)에서 사용자의 Crontab 파일을 삭제합니다. 삭제 후에는 사용자의 모든 crontab이 사라집니다.

%는 crontab에서 줄 바꿈을 의미하는 특별한 의미를 갖습니다. 사용하려면 %를 이스케이프해야 합니다. 예를 들어 자주 사용되는 날짜 '+%Y%m%d'는 crontab에서 실행되지 않으며 '+%Y%m%d' 날짜로 대체되어야 합니다.

관련 권장 사항:

Linux의 예약 작업 crontab에 대한 자세한 설명

PHP의 예약 작업 crontab에 대한 자세한 설명

Crontab 명령에 대한 자세한 소개

위 내용은 Linux 예약 작업 Crontab 명령에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.