매일 자정에 스크립트를 실행할 크론을 작성하는 방법은 무엇입니까?


144

crontab이 좋은 선택이라고 들었지만 라인을 어떻게 작성하고 서버에서 어디에 배치해야합니까?

답변:


261

다음 은 crontab이 무엇이며 Ubuntu에서 사용하는 방법에 대한 유용한 자습서 입니다. crontab 줄은 다음과 같습니다.

00 00 * * * ruby path/to/your/script.rb

( 00 00자정 -0 분 0 시간을 나타내며 *s는 매월 매일 의미합니다.)

통사론: 
  mm hh dd mt wd 명령

  mm 분 0-59
  hh 시간 0-23
  dd 달 1-31
  월 1-12
  wd 요일 0-7 (일요일 = 0 또는 7)
  명령 : 실행할 내용
  모든 숫자 값은 *로 대체 될 수 있습니다.

1
'사용자로 실행'열을 놓치지 않습니까?
Lucas Cimon

4
@LucasCimon /etc/crontab(우분투에서는) 사용자 열 (명령 앞에갑니다)이 허용 되지만 실행할 crontab -e때이 열을 허용하지 않는 사용자 별 crontab을 편집하고 있습니다. IIRC Ubuntu는 /etc/crontab덮어 쓰기 때문에 수동으로 종료하지 않는 것이 좋습니다 . 여기를 참조하십시오 : stackoverflow.com/questions/8475694/…
Jordan Jordan

@Jordan 그래서 루트에 대한 crontab에 대한 대답은 다음과 같습니다sudo crotab -u root -e
dashesy

40

맨 페이지에서

linux$ man -S 5 crontab

   cron(8) examines cron entries once every minute.

   The time and date fields are:

          field          allowed values
          -----          --------------
          minute         0-59
          hour           0-23
          day of month   1-31
          month          1-12 (or names, see below)
          day of week    0-7 (0 or 7 is Sun, or use names)
   ...
   # run five minutes after midnight, every day
   5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
   ...

사용할 수있는 특수한 "닉네임"(man 페이지에 문서화 됨), 특히 시간과 날짜를 대체 할 수없는 "@reboot"를 기록하는 것이 좋습니다.

   # Run once after reboot.
   @reboot         /usr/local/sbin/run_only_once_after_reboot.sh

이 트릭을 사용하여 분당 cron 작업을 여러 번 실행할 수 있습니다.

   # Run every minute at 0, 20, and 40 second intervals
   * * * * *       sleep 00; /usr/local/sbin/run_3times_per_minute.sh
   * * * * *       sleep 20; /usr/local/sbin/run_3times_per_minute.sh
   * * * * *       sleep 40; /usr/local/sbin/run_3times_per_minute.sh

크론 작업을 추가하기 위해 다음 세 가지 중 하나를 수행 할 수 있습니다.

  1. 위에 표시된대로 사용자의 crontab에 명령을 추가하십시오 (crontab의 섹션 5, 매뉴얼 페이지).

    • 사용자의 crontab을 루트로 편집하십시오. crontab -e -u <username>
    • 또는 현재 사용자의 crontab을 편집하여 crontab -e
    • EDITOR환경 변수를 사용하여 편집기를 설정할 수 있습니다
      • env EDITOR=nano crontab -e -u <username>
      • 또는 전체 쉘 세션에 대해 EDITOR의 값을 설정하십시오.
        1. export EDITOR=vim
        2. crontab -e
    • 스크립트를 사용하여 실행 가능하게 만들기 chmod a+x <file>


  1. cron 작업으로 스크립트 / 프로그램을 작성하여 시스템의 anacron /etc/cron.*ly디렉토리에 추가하십시오.

    • anacron /etc/cron.*ly 디렉토리 :
      • /etc/cron.daily
      • /etc/cron.hourly
      • /etc/cron.monthly
      • /etc/cron.weekly
    • 에서와 같이 :
      • /etc/cron.daily/script_runs_daily.sh
      • chmod a+x /etc/cron.daily/script_runs_daily.sh -실행 가능하게 만들기
    • anacron 매뉴얼 페이지를 참조하십시오. man anacron
    • 스크립트를 사용하여 실행 가능하게 만들기 chmod a+x <file>
    • 이 cron. * ly 스크립트는 언제 실행됩니까?
      • RHEL / CentOS 5.x의 경우 설정된 시간에 구성 /etc/crontab되거나 /etc/anacrontab실행됩니다.
      • RHEL / CentOS 6.x + 및 Fedora 17+ Linux 시스템에서는이 항목 만 정의 /etc/anacrontab하고 cron.hourly를 정의하십시오./etc/cron.d/0hourly


  1. 또는에서 시스템 crontable을 만들 수 있습니다 /etc/cron.d.

    • 앞에서 설명한 crontab 구문 (사용자에게 각 작업을 실행할 수있는 추가 기능 제공)이 파일에 저장되고 파일은 /etc/cron.d 디렉토리에 놓입니다.
    • 이들은 시스템 패키징 (예 : RPM 패키지)에서 관리하기 쉽기 때문에 대개 응용 프로그램에 따라 다를 수 있습니다.
    • 구문 차이는 시간 / 날짜 필드 이후와 명령을 실행하기 전에 cron 작업에 대해 사용자를 지정해야한다는 것입니다.
    • 추가 된 파일은 /etc/cron.d실행 파일 일 필요는 없습니다.
    • 다음은 user로서 실행되는 작업의 예 someuser이며 /bin/bash셸로 사용 하도록 강요합니다.


   File: /etc/cron.d/myapp-cron
   # use /bin/bash to run commands, no matter what /etc/passwd says
   SHELL=/bin/bash
   # Execute a nightly (11:00pm) cron job to scrub application records
   00 23 * * * someuser /opt/myapp/bin/scrubrecords.php

5

때때로 rvm과 함께 crontab을 사용하여 PATH 및 GEM_PATH를 지정해야합니다.

이처럼 :

# top of crontab file
PATH=/home/user_name/.rvm/gems/ruby-2.2.0/bin:/home/user_name/.rvm/gems/ruby-2.2.0@global/bin:/home/user_name/.rvm/rubies/ruby-2.2.$
GEM_PATH=/home/user_name/.rvm/gems/ruby-2.2.0:/home/user_name/.rvm/gems/ruby-2.2.0@global

# jobs
00 00 * * * ruby path/to/your/script.rb
00 */4 * * * ruby path/to/your/script2.rb
00 8,12,22 * * * ruby path/to/your/script3.rb

4

크론 작업 설정을위한 빠른 안내서

새 텍스트 파일을 작성하십시오 (예 : mycronjobs.txt).

각 일일 작업 (00:00, 03:45)에 대해 스케줄 라인을 mycronjobs.txt에 저장하십시오.

00 00 * * * ruby path/to/your/script.rb
45 03 * * * path/to/your/script2.sh

cron에 작업 전송 (이 작업을 실행할 때마다 cron은 저장된 내용을 삭제하고 mycronjobs.txt 의 새로운 정보로 업데이트합니다 )

crontab mycronjobs.txt

유용한 정보

현재 크론 작업보기

crontab -l

모든 크론 작업 제거

crontab -r

crontab 구문이 03:45에 올바르지 않습니다. crontab 필드는 분과 시간입니다 (예 : "45 03")-게시물에 거꾸로 있습니다.
Russell E Glaue

1

cron 작업을 사용하거나 쉘 스크립트를 작성하여 두 가지 방법으로 쉘 스크립트를 실행할 수 있습니다.

스크립트 이름이 "yourscript.sh"라고 가정합니다

먼저 스크립트의 사용자 권한을 확인하십시오. 아래 명령을 사용하여 스크립트의 사용자 권한을 확인하십시오.

ll script.sh

스크립트가 루트에 있으면 아래 명령을 사용하십시오.

sudo crontab -e

두 번째로 스크립트에 사용자 "ubuntu"가 있으면 아래 명령을 사용하십시오.

크론 탭 -e

crontab에 다음 줄을 추가하십시오.

55 23 * * * /path/to/yourscript.sh

이 작업을 수행하는 또 다른 방법은 스크립트를 작성하고 backgroud에서 실행하는 것입니다

다음은 매일 23:55 pm에 실행될 스크립트 이름 (예 : youscript.sh)을 입력해야하는 스크립트입니다.

#!/bin/bash while true do /home/modassir/yourscript.sh sleep 1d done

파일에 저장하십시오 ( "every-day.sh"로 이름 지정)

sleep 1d-하루 동안 기다렸다가 다시 실행됨을 의미합니다.

이제 스크립트에 권한을 부여하십시오. 아래 명령을 사용하십시오 :-

chmod + x every-day.sh

이제 "nohup"을 사용하여 백그라운드에서이 쉘 스크립트를 실행하십시오. 세션에서 로그 아웃 한 후에도 스크립트가 계속 실행됩니다.

아래 명령을 사용하여 스크립트를 실행하십시오.

nohup ./every-day.sh &

참고 :-매일 오후 23:55에 "yourscript.sh"를 실행하려면 정확히 23:55에 "every-day.sh"스크립트를 실행해야합니다.


0

이 문장을 crontab 파일에 넣으십시오 : 0 * * * / usr / local / bin / python /opt/ByAccount.py> /var/log/cron.log 2> & 1

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.