Cron 및 crontab, 설명

루카 인 출판 얼마 전에 cron 및 crontab에 대한 훌륭한 자습서 나눌 가치가 있다고 생각합니다. Cron은 Windows의 예약 된 작업에 해당합니다., 터미널에서 처리되는 경우에만. 동일한 목표를 달성하기 위해 시각적 인터페이스를 선호하는 사람들은 이것을 볼 수 있습니다. 다른 항목.

크론이란 무엇입니까?

cron이라는 이름은 "시간"을 의미하는 그리스 크로노스에서 유래되었습니다. Unix 운영 체제에서 cron은 정기적 인 간격 (예 : 매분, 일, 주 또는 월)으로 프로세스 또는 스크립트를 실행하는 일반 백그라운드 프로세스 관리자 (데몬)입니다. 실행해야하는 프로세스와 실행해야하는 시간은 crontab 파일에 지정되어 있습니다.

코모 작품

cron 데몬은 /etc/rc.d/ o / 기타 / init.d에 분포에 따라. Cron은 백그라운드에서 실행되며 XNUMX 분마다 crontab 작업 테이블을 확인합니다. / etc / crontab O 전용 / var / 스풀 / cron 수행 할 작업을 검색합니다. 사용자는 일부 프로세스를 자동화하기 위해 cron에 작업이있는 명령이나 스크립트를 추가 할 수 있습니다. 이는 예를 들어 시스템 또는 좋은 백업 시스템의 업데이트를 자동화하는 데 유용합니다.

관련 기사 :
자습서 : .tar.gz 및 .tar.bz2 패키지 설치

Crontab은 무엇입니까?

Crontab은 사용자가 지정한 시간에 실행할 명령 목록을 저장하는 간단한 텍스트 파일입니다. Crontab은 스크립트 또는 명령이 실행되어야하는 날짜와 시간, 실행 권한을 확인하고 백그라운드에서 수행합니다. 각 사용자는 자신의 crontab 파일을 가질 수 있습니다. / etc / crontab 이것은 루트 사용자의 crontab 파일로 간주됩니다. 일반 사용자 (심지어 루트까지)가 자신의 crontab 파일을 생성하고자 할 때 crontab 명령을 사용합니다.

Crontab은 단순 시스템 사용자 또는 루트 사용자로 다중 사용자 시스템에서 cron 작업을 관리하는 가장 쉬운 방법입니다.

crontab 사용

간단한 예부터 시작하겠습니다.

우리는 시스템 업데이트를 자동화하여 "항상 업데이트해야하는데 싫어요!"라는 성가신 문제를 제거 할 것입니다.

관련 기사 :
시스템을 알기위한 명령 (하드웨어 및 일부 소프트웨어 구성 식별)

우선 우리는 스크립트를 만들 것입니다. 이 스크립트는 cron에 의해 호출되며 우리가 원하는 모든 지침을 포함하므로 다음과 같은 간단한 업데이트 스크립트 인 cron에 포함하기 전에 여러 경우와 여러 방법으로 테스트해야합니다.

#! / bin / bash #script 업데이트 예제 # 배포판 선택 # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

배포판에서 #을 제거하십시오. Ubuntu / Debian 인 경우 apt-get으로 시작합니다.

스크립트를 update.sh로 저장합니다 (예 : 스크립트 디렉토리 홈). 해당 스크립트의 실행 권한을 다음과 같이 변경합니다.

chmod a + x ~ / 스크립트 / update.sh

스크립트를 두 번 실행하여 모든 것이 원활하게 실행되는지 확인하고 필요한 사항을 수정합니다 (오류를 포함해서는 안됩니다. 그렇지 않으면 cron이 오류를 반복해서 반복합니다). 이제 crontab에 작업을 추가합니다.

crontab에 작업 추가

우리는 crontab -e를 사용하여 crontab 에디션을 실행합니다. 일부 배포판 (예 : Ubuntu)에서는 원하는 텍스트 편집기를 선택할 수있는 옵션을 제공하고 나머지는 vi로 남겨 둡니다. crontab 파일은 다음과 같습니다.

# mh dom mon dow 사용자 명령

어디서 :

  • m 스크립트가 실행될 분에 해당하며 값의 범위는 0 ~ 59입니다.
  • h 정확한 시간, 24 시간 형식이 처리되며 값은 0에서 23까지이며 0은 자정 12시입니다.
  • DOM 예를 들어 15 일마다 실행하려면 15를 지정할 수 있습니다.
  • 다우 지수 요일을 의미하며 숫자 (0 ~ 7, 0과 7은 일요일) 또는 영어로 된 하루의 처음 3 자 (월, 화, 수, 목, 금, 토, 일) 일 수 있습니다.
  • 사용자 명령을 실행할 사용자를 정의합니다. 루트 또는 스크립트 실행 권한이있는 한 다른 사용자 일 수 있습니다.
  • 명령 실행할 스크립트의 명령 또는 절대 경로를 나타냅니다. 예 : /home/usuario/scripts/update.sh, 스크립트를 호출하는 경우 실행 가능해야합니다.

설명 된 cron 작업의 몇 가지 예를 명확히하기 위해 :

15 10 * * * 사용자 /home/usuario/scripts/update.sh

매일 오전 10시 15 분에 update.sh 스크립트를 실행합니다.

15 22 * * * 사용자 /home/usuario/scripts/update.sh

매일 오후 10:15에 update.sh 스크립트를 실행합니다.

00 10 * * 0 root apt-get -y root 사용자 업데이트

매주 일요일 오전 10시에 업데이트를 실행합니다.

45 10 * * 태양 루트 apt-get -y 업데이트

루트 사용자는 매주 일요일 (일) 오전 10:45에 업데이트를 실행합니다.

30 7 20 11 * 사용자 /home/usuario/scripts/updata.sh

20 월 7 일 30시 XNUMX 분에 사용자가 스크립트를 실행합니다.

30 7 11 11 sun 사용자 /home/usuario/scripts/pastel_con_velitas.sh

11 월 7 일 오전 30시 XNUMX 분, 즉 일요일에 사용자는 시스템 관리자 (즉, 나)를 축하합니다.

01 * * * * 사용자 /home/usuario/scripts/molestorecordatorio.sh

매일 매시간 XNUMX 분마다 성가신 알림 (권장하지 않음).

여전히 처리 가능 특수 범위 :

30 17 * * 1,2,3,4,5

월요일부터 금요일까지 매일 오후 5시 30 분.

00 12 1,15,28 * *

매월 첫째, 12, 28 일 정오 (급여 지급에 적합)

이것이 혼란 스러울 경우 crontab은 이러한 범위를 정의하는 특수 문자열.

@reboot 시작시 한 번 실행
@yearly는 0 년에 한 번만 실행 : 0 1 *
@ 연간 @yearly와 동일
@monthly는 한 달에 한 번, 첫날 실행 : 0 0 * *
@weekly 매주 한주의 첫 시간의 첫 0 분입니다. 0 0 * * XNUMX ″.
@ 매일 오전 12시 00 0 * * *
@daily와 같은 자정
@ 매시간 0 분마다 : XNUMX * * * *

그 사용은 매우 간단합니다.

@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y upgrade

마지막으로 중요한 것은 :

크론 작업 관리

crontab 파일

기존 crontab 파일을 사용자 정의 파일로 교체

crontab을 -e

사용자의 crontab 파일을 편집하면 각각의 새 줄이 새 crontab 작업이됩니다.

crontab -l

모든 사용자의 crontab 작업 나열

크론탭 -d

사용자의 crontab 삭제

crontab -c 디렉토리

사용자의 crontab 디렉토리를 정의합니다 (사용자의 쓰기 및 실행 권한이 있어야 함).

crontab -u 사용자

다른 사용자의 crontab을 처리하기위한 접두사, 예 :

$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u 사용자

이 도구는 다른 많은 도구와 마찬가지로 다음에서 더 자세히 볼 수 있습니다.

고마워 Lucain!

기사의 내용은 우리의 원칙을 준수합니다. 편집 윤리. 오류를보고하려면 여기에.

48 코멘트, 당신의 것을 남겨주세요

코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.

  1.   알바로 오티즈

    어 ... 좀 헷갈리네요.

  2.   토닉

    * / 30 분마다 실행되는 30이 누락되었습니다 (분 필드에 있음).

    1.    erm3nda

      댓글을 검토하기로 결정할 때까지 댓글을 달았습니다 😀
      이 수정자는 매우 중요한 정보이며 매우 유용한 것입니다.

      1.    키카

        안녕하세요!
        지금은 45 분마다 구성을 테스트하고 있습니다.

        * / 45 * * * *, 명령은 매시간 45 분 및 매시간 실행됩니다. 즉 말하자면:

        3:45, 4:00, 4:45, 5:00, 5:45, 6:00, 6:45 등으로 실행됩니다.

        45 분마다 또는 적어도 매시간 45 분에 한 번이되도록하려면 어떻게해야합니까?

    2.    키카

      안녕하세요!
      지금은 45 분마다 구성을 테스트하고 있습니다.

      * / 45 * * * *, 명령은 매시간 45 분 및 매시간 실행됩니다. 즉 말하자면:

      3:45, 4:00, 4:45, 5:00, 5:45, 6:00, 6:45 등으로 실행됩니다.

      45 분마다 또는 적어도 매시간 45 분에 한 번이되도록하려면 어떻게해야합니까?

  3.   느슨하게

    안녕하세요, 크론의 작동 방식을 설명하는 데 유용한 정보입니다.
    바이트

  4.   느슨하게

    *

  5.   사냥꾼

    훌륭합니다. cron의 작동 방식을 명확히 해주셔서 감사합니다.

  6.   야곱

    내가 이해하는이 줄은 오후 10시 15 분에 실행될 것입니다. 틀 렸으면 수정 해주세요.
    글쎄, 오전 10시 15 분
    15 22 * * * 사용자 /home/usuario/scripts/update.sh

  7.   어거스틴

    여보세요! 아주 좋은 정보.
    30 분마다 스크립트를 실행하려면 CronTab에 추가해야하는 행은 다음과 같습니다. "XNUMX * * * * root Scrip.sh"맞습니까? 정말 고맙습니다!

  8.   리눅스를 사용하자

    아니오. 내가 정확하게 기억한다면 / 30 * * * * root Scrip.sh를 넣어야합니다.
    즉, 30 앞에 /를 추가합니다.
    건배! 폴.

  9.   조나단

    안녕하세요, 귀하의 게시물이 마음에 들었습니다. 매우 완벽하지만 질문하고 싶습니다.
    이 명령과 "at"과 같은 명령에 문제가 있습니다.

    특정 시간에 스크립트를 실행하고

    at -f /home/mi_user/Desk/script.sh 18:08 예제

    그리고 스크립트는 화면, 즉 터미널에서 실행되지 않습니다. 백그라운드에서 실행됩니까?

    그리고 cron을 사용하면 같은 일이 발생합니다. "crontab -e"로 crontab 파일을 편집합니다.

    끝에 다음 줄을 추가합니다.

    46 19 my_user /home/mi_user/Desk/script.sh

    아무것도하지 않고 스크립트를 표시하지 않습니다.

    어떠한 제안? 대단히 감사하고 불편을 끼쳐 드려 죄송합니다

    1.    리눅스를 사용하자

      터미널이 표시 되려면 터미널을 실행하고 스크립트를 매개 변수로 전달해야 할 수 있습니다.

      예를 들면 다음과 같습니다

      lxterminal -e "my_user /home/my_user/Desk/script.sh"

      사용할 매개 변수는 사용하는 터미널 에뮬레이터에 따라 다를 수 있습니다.

      나는 그것이 효과가 있기를 바랍니다.

      포옹! 폴.

  10.   Patretcas

    입력에 감사드립니다.

    10 점 !!

    살루2!!

  11.   Rodolfo

    정말 감사합니다. 몇 가지 사항을 명확히하는 데 많은 도움이되었습니다. 자세한 내용이나 의심에 대해서는 MAN PAGE로 이동하여 인사말을 반복합니다.

  12.   자히르

    정말 감사합니다. 저는 예제를 읽고 테스트했습니다. 정말 고마워요 ... 아주 이해할 수 있습니다. 건배

  13.   지오바니

    나는 우분투 서버 12.04.2 LTS를 사용했고, 사용자의 작업 목록을 삭제하기 위해 내가 가지고있는 crontab의 버전 인 crontab -r (그리고이 매뉴얼에서 말하는 것처럼 -l)을 사용했습니다. 물론 버전 문제입니다.

    반면에 저는 한때 crontab 만 실행했고 이런 종류의 실행 파일을 만들 수 있었지만 이것은 실행중인 파일이 아닙니다. 실행되는 것은 / etc / crontab에있는 것입니다. 누군가가 주석을 사용할 것입니다.

    추신 (찾고 crontab 위치를 검색했지만 앞서 언급 한 주소와 암호화 된 다른 파일 만 반환 했으므로 실행 된 파일이 / etc / crontab에 있지만 crontab -e 명령을 실행할 때 내 것이 나타났습니다 내가 정의한 모든 작업과 함께)이 파일은 어디에 '???? 문안 인사. 나는 항상 루트로 로그인합니다.

  14.   세바스티안

    훌륭하고 매우 유용합니다 !!!

  15.  

    안녕하세요, 저는 이것을하고 싶습니다 …………«15 10 * * * root ifdown eth0»

    즉, 특정 시간에 네트워크 카드가 꺼집니다. ………… 음, crontab에 넣었는데 작동하지 않았습니다. …… .. 무슨 일입니까?

    인사말 및 감사

  16.   미겔

    "crontab에 작업 추가"라는 제목 뒤에 "mon"을 정의하지 못했습니다.

    이 기사는 여전히 훌륭하고 cron은 매우 유용합니다.

  17.   오스카

    좋은 게시물이 얼마나 멋 졌는지 물어봐
    작업 실행으로 인해 남겨진 기록을 추적하려면 어디에서 볼 수 있습니까?

    decdir이 파일의 과거에 수행 된 작업 내역을보고 싶습니다. 누가 파일을 수정했는지, 날짜를보고 싶습니다.

    감사

  18.   오스카

    이것의 수정 이력을 확인하고 싶습니다

    내가 어떻게 해

    감사

  19.   안드레스 레도

    좋은 아침입니다,

    우분투 스크립트에서 실수를했다고 생각합니다. apt-get -y upgrade 대신 ap-get -y upgrade를 넣었습니다. (당신은 t를 떠났습니다).

    인사말.

    1.    리눅스를 사용하자

      그렇습니다. 감사합니다!
      포옹! 폴

  20.   가브리엘

    실행 시간, 디렉토리 등을 지정할 수 있도록 cron 파일을 만드는 방법을 알고 싶습니다.

  21.   발렌틴

    cron의 작동과 기본 명령을 명확히 해주셔서 감사합니다.

  22.   샌더

    Gnu / Linux와 관련된 주제에 대한 정보를 찾을 때마다 결국에는이 위대한 커뮤니티에서 가장 좋은 튜토리얼을 90 %의 사례에서 찾아 내고, 이제부터는 여기에서 시작하고 다른 곳에서 시작할 것이라고 생각합니다.

    안부

    1.    리눅스를 사용하자

      감사합니다 샌더! 포옹! 폴.

  23.   Daryo

    dom = 날짜
    dow = 요일
    당신이 연결하면 더 쉽습니다

  24.   유월절 축제의

    매우 완전하고 잘 설명해 주셔서 대단히 감사합니다.

  25.   상악

    이것은 내 OS 선생님이 우리에게 준 것과 같은 것입니다. 나는 아무것도 변경하지 않습니다. 이제 수업이 왜 그렇게 나쁜지 알 수 있습니다 .-. 이것은 숙제 xD와 동일합니다.

  26.   마르셀로

    추정,

    쿼리, 작업 기간을 제한 할 수 있습니까?
    예를 들어 5 분마다 반복되는 작업이 있습니다.이 작업이 계속 활성화되어 있으면 반복 할 때 종료하고 다시 실행합니다.

    감사합니다,
    마르셀로 .-

    1.    리눅스를 사용하자

      안녕하세요, 마르셀로!

      이 질문을 우리의 질의 응답 서비스에서하시면 더 좋을 것 같습니다. Linux에서 질문 커뮤니티 전체가 문제 해결에 도움을 줄 수 있습니다.

      안아줘, 파블로

  27.   aj

    좋은 게시물입니다.
    crontab에 작업을 추가하는 터미널 별 명령은 무엇입니까 (crontab을 입력하고 'crontab -e'로 수동으로 추가하거나 crontab을 'crontab 파일'로 다른 crontab으로 대체하지 않고).
    아이디어는 crontab에 작업을 추가하는 외부 스크립트를 만드는 것입니다.
    감사합니다

    1.    데이비드

      추가하고 싶은 것은 무엇이든 '에코'를 사용할 수있는 것 같습니다. '| 고양이 >> 'cronotab 경로 (/ etc / cronotab)'«

  28.   라파엘 베라

    3 일마다 표현식이 정확히 어떻게 실행됩니까?

  29.   호세 안토니오

    안녕하세요.

    cron 작업을 실행하는 데 문제가 있습니다.

    cronta -e로 다음 작업을 실행합니다.

    01 * * * * 루트 /home/user/script/mfile.sh

    그러나 작업이 완료되지 않았습니다. myfile.sh에 실행 권한이 있고이를 실행하는 사용자가 루트인지 확인했습니다.

    나는 / etc / crontab에서 동일한 작업을 실행하고 서비스를 다시 시작한 후 나에게도 작동하지 않습니다.
    myfile.sh의 내용은 DB를 업데이트하는 명령이며 콘솔에서 실행하면 작동합니다.
    문제가 무엇인지 아십니까?

    1.    Fredd

      데이터베이스 사용자에게 모든 권한이있는 것은 아니며 먼저 데이터베이스 엔진에서 환경 변수를 내 보내야합니다.
      예를 들어 db2에서이 줄은 스크립트의 시작 부분으로 이동합니다.
      . / 홈 / db2inst1 / sqllib / db2profile

      또 다른 원인은 스크립트에 데이터베이스 연결이 필요하고 스크립트 내에서 데이터베이스에 연결해야하기 때문일 수 있습니다.

  30.   LA3

    나는 크론 드를 다시 시작해야한다는 것을 몰랐다. 나는 이것으로 한동안 싸우고 있었다

  31.   kenia

    그들은 매월 말에 작업이 실행된다는 것을 나타내는 방법을 알게 될 것입니다. 표시된 시간에 .. 세부 사항은 내가 매월 말일에 걸리는 것을 어떻게 알 수 있는지 달성 할 수 없다는 것입니다 .. ??? 하나 하나 적어야했는데 XNUMX 월 말이 다가 오면 비시에 스토라는 게 나에게 복잡해 ..

  32.   예수

    좋은 날!!

    crontab에서 실행중인 프로세스를 어떻게 중지합니까?

  33.   예수

    프로세스 * …………

  34.   줄리아나

    당신이 나를 도울 수 있습니까? crontab이 작동하지 않는 minha가 작성한 eu tenho 음 스크립트! 특정 크론이나이를 실행할 수있는 사용자가 아닌 모든 권한을 확인하십시오. 거의 아무 일도 일어나지 않습니다! 당신이 나를 도울 수 있는지 알고 싶습니다. 다른 것들은 cron이 작동하지 않습니다! Vlws

  35.   앤 톡스

    매월 마지막 날 (일 : 31-30-28)을 실행하도록 작업을 어떻게 배치 하시겠습니까?

  36.   Tfercho

    아시다시피 su 명령은 콘솔에서 사용자를 변경하는 데 사용됩니다. su 명령을 사용하면 "your user"사용자를 변경하지만 "user"의 적절한 설정없이 su를 실행하면 "su-user"사용자 설정을로드하여 사용자를 변경합니다. cron으로 사용자를 표시하지만이 사용자의 구성을 어떻게로드합니까?

  37.   강도질하다

    그리고 내가 멈추고 싶다면?

  38.   레기

    안녕하세요
    나는 내가 뭘 잘못하고 있는지 모르지만 단계를 따르고 아무것도 실행되지 않습니다. 나는 시도했다 :
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * 루트 / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * 루트 usr / bin / test.sh

    그리고 전혀. 아무것도 실행하지 않습니다. 나는 모든 것을 재부팅했습니다.

  39.   페르코스

    대단히 감사합니다