Cron 및 Crontab을 사용하여 Linux에서 작업을 예약하는 방법

Cron 및 Crontab을 사용하여 Linux에서 작업을 예약하는 방법

당신은 알고 계십니까 블레이드 러너 2019년으로 설정되어 있나요? 지금부터 3년입니다! 언급 할 필요없는 백 투 더 퓨처 2 , 그곳에서 그들은 2015년으로 시간 여행을 합니다. 그러나 우리에게는 하늘을 나는 자동차가 없으며 우리 가운데 리플리컨트도 없습니다(내가 아는 한).





현재 기술을 가상의 미래 묘사와 비교할 때 현재 기술에 실망하기 쉽습니다. 하지만 오늘날에는 전화, 컴퓨터, 심지어 집에서도 놀라운 일을 할 수 있습니다. 작업을 자동화하는 기능이 그 중 하나입니다.





모든 Linux 사용자는 시스템과 관련된 작업(예: 오래된 로그 정리 및 패키지 업데이트 ) 또는 사용자에게 서비스 제공(이메일 확인, 팟캐스트 다운로드...). Windows 사용자는 Windows 95부터 작업 스케줄러를 사용했습니다. Linux에서 동일한 작업을 수행하는 유틸리티를 cron이라고 합니다. 여기서는 사용 방법을 설명합니다.





나는 스마트 TV를 원하지 않는다

크론이란 무엇입니까?

Cron은 백그라운드에서 실행되고 예약된 작업을 확인하고 발견하면 실행하는 시스템 서비스입니다. ' cron 작업 '이라고도 하는 작업은 cron이 1분마다 검사하는 특수 구성 파일(crontabs)에 정의됩니다. 다양한 Linux 배포판에서 여러 버전의 cron을 찾을 수 있습니다. 예를 들어 Fedora의 cron 포크는 크로니 , 그리고 또한 있습니다 프론 , 브론 , 그리고 드크론 . 일부는 추가 기능이 있고 다른 일부는 보안에 더 중점을 두고 있지만 모두 동일한 아이디어를 기반으로 합니다.

이 가이드는 가장 널리 사용되는 cron 버전인 vixie-cron용으로 작성되었으며 Ubuntu 및 그 파생물에서 찾을 수 있습니다. 대부분의 지침은 다른 cron 구현에도 적용되지만 약간의 차이가 있을 수 있으므로 전환하기로 결정한 경우 설명서를 확인하십시오.



크론탭이란?

시간 관리에 대해 진지하다면 앱이나 최소한 종이 한 장과 같은 일종의 달력이 있을 것입니다. Crontab은 컴퓨터의 달력과 매우 유사합니다. 예약된 작업에 대한 정보를 보유하고 cron에게 어떤 명령을 언제 실행할지 알려줍니다.

사실, 여러 crontab이 시스템에 있습니다. 모든 사용자는 루트(관리자)를 포함하여 고유한 crontab이 있습니다. 사용자 crontab은 다음 위치에 저장됩니다.





/var/spool/cron/crontabs/

. NS

crontab -l

명령은 현재 사용자의 crontab 파일을 나열합니다. 다음을 사용하여 루트 crontab을 확인할 수 있습니다.





sudo crontab -l

.

또한 시스템 crontab 파일이 있습니다.

/etc/crontab

시스템 전체 작업에 사용됩니다. 일반적으로 실행 가능한 루트 소유 스크립트의 형태를 취합니다.

/etc/cron.hourly/

,

/etc/cron.daily/

,

/etc/cron.weekly/

, 그리고

/etc/cron.monthly/

폴더 및 일부 배포판에서는

/etc/cron.d/

폴더도. 일반적으로 이러한 작업은 대부분 설치된 응용 프로그램에 의해 자동으로 생성되기 때문에 이러한 작업을 처리할 필요가 없습니다.

Cron으로 작업을 예약하는 방법

간단하게 들립니다. 작업을 예약하려면 crontab에 추가하기만 하면 됩니다. crontab은 특수한 구성 파일이므로 수동으로 편집하지 않는 것이 좋습니다. 대신 다음을 사용하십시오.

crontab -e

명령. 루트 또는 다른 사용자의 crontab을 편집하려면 관리자 권한으로 명령을 실행하고 -u 옵션 뒤에 사용자 이름을 추가하십시오.

sudo crontab -u root -e
sudo crontab -u username -e

crontab 파일에는 두 개의 섹션이 있습니다. 첫 번째는 자동으로 설정되는 환경 변수를 포함합니다. PATH, HOME, SHELL 변수를 안전하게 변경하고 MAIL 변수를 수정할 수 있습니다.

파일의 두 번째 부분은 예약된 작업이 포함된 실제 '시간표'입니다. 모든 작업은 다음 값을 나타내는 열과 함께 테이블의 한 줄(행)을 차지합니다.

작업을 성공적으로 예약하려면 crontab 구문에 대해 약간 알아야 합니다.

  • 숫자는 정수(정수)여야 하며 모든 열에 '분/일/월...'을 의미하는 와일드카드로 별표(*)를 사용할 수 있습니다.
  • 'Day of Month' 컬럼에서 'Month' 컬럼에 지정된 월(예: 2월 30일)에 발생하지 않는 날짜를 설정하지 않도록 주의하십시오.
  • '월' 및 '요일' 열은 각각 월과 일에 대한 짧은 이름을 허용하며 대소문자를 구분하지 않습니다.
  • '요일' 열에서 0과 7은 모두 일요일을 나타냅니다. '시' 열에는 '군사 시간'(24시간제) 형식이 필요하지만 숫자 24를 사용할 수 없습니다. 대신 0은 오전 12시를 나타냅니다. 1 대신 0에서.
  • 초는 지원되지 않으므로 특정 초에 작업을 예약할 수 없습니다.

할 수 있는 일은 하이픈을 사용하여 포괄적인 시간 범위를 예약하거나('시간' 아래의 14-22는 오후 2시부터 오후 10시까지 작업을 계속 실행함) 쉼표로 구분된 목록을 정의하여 단일 작업을 여러 번 실행하는 것입니다(1, '요일' 아래의 3,5는 월요일, 수요일, 금요일에 작업을 실행합니다.

한편, 단계 값은 슬래시(/)로 표시되며, 이는 범위 내에서 건너뛰는 양을 나타냅니다. 예를 들어 'Hours' 아래의 3-20/3은 오전 3시부터 오후 8시까지 3시간마다 작업을 실행합니다. 별표와 단계(*/X)를 결합할 수 있으므로 X시간마다 작업을 반복하려는 경우에 유용합니다. 숫자를 사용하는 한 범위를 목록과 결합하고 단계를 범위와 결합할 수 있습니다. 즉, 'jan-mar' 또는 'Tue,Fri-Sun'과 같은 조합은 허용되지 않습니다.

또는 모든 열에 대한 값을 설정하는 대신 행 시작 부분에 @weekly, @yearly, @monthly, @daily 또는 @hourly를 입력한 다음 명령을 입력할 수 있습니다. 이렇게 예약하면 작업이 가능한 첫 번째 인스턴스에서 실행되므로 @weekly는 주의 첫째 날 자정에 실행됩니다. 시스템이 (재)시작될 때 즉시 작업을 실행하려면 @reboot 명령을 사용하십시오.

이 예에서는 매일 08:20 및 20:20에 백업을 예약했습니다. 배경 화면은 3일마다 19:00에 자동으로 변경되며 스크립트는 매주 월요일 10:20 및 20:20에 새 팟캐스트를 확인합니다. 생일 알림은 3월 25일로 설정되어 있으며 지정된 시간 프레임 내에서 30분마다 실행됩니다. 마지막으로 스크립트는 8시부터 20시까지 15분마다 이메일을 확인하지만 근무일에만 확인합니다. 열 사이에 공백과 탭을 사용하여 crontab을 자유롭게 구성할 수 있지만 열 사이에는 그렇지 않습니다(쉼표, 하이픈 및 슬래시 사이에 공백을 두지 마십시오).

이 모든 것이 너무 복잡하게 들리더라도 걱정하지 마십시오. 항상 인터넷에 의존할 수 있습니다. 다음과 같은 도구 크론탭 생성기 , Crontab.guru , 그리고 Corntab을 사용하면 crontab 구문을 몰라도 cron 작업을 만들 수 있습니다. 작업이 다음에 실행될 때를 보여주고 일반적으로 사용되는 표현식에 대한 템플릿을 제공합니다. Crontab.guru는 crontab 구문을 실시간으로 테스트할 수 있으므로 변경 사항이 일정에 어떤 영향을 미치는지 즉시 확인할 수 있기 때문에 최고입니다.

Cron 작업이 실행되었는지 확인하는 방법

Cron은 백그라운드에서 조용히 실행되며 작업을 처리하는 동안 방해받지 않고 작업할 수 있도록 합니다. 그러나 실제로 작동하는지 어떻게 확인할 수 있습니까?

Cron에는 이메일 알림 기능이 내장되어 있지만 이를 위해서는 최소한 간단한 로컬 메일 서버를 설정해야 합니다. 많은 가정 사용자가 이것을 구성할 의사가 없으며 기본적으로 제공하는 배포판도 많지 않습니다(예: Ubuntu에서는 제공하지 않음). cron을 확인하는 가장 빠른 방법은 다음 명령으로 시스템 로그를 스캔하는 것입니다.

cat /var/log/syslog | grep -i cron

-i 옵션을 사용하면 쿼리가 대소문자를 구분하지 않습니다. cron이 어딘가에 자체 로그 파일을 가질 가능성이 있습니다.

/var/log/

, 따라서 이 명령이 유용한 결과를 생성하지 못하면 그곳을 살펴보십시오.

특정 cron 작업의 출력을 저장해야 하는 경우 파일로 리디렉션할 수 있습니다. 실행하려는 명령 뒤에 crontab의 마지막 열에 파일의 경로와 이름을 제공하십시오.

30 * * * * /usr/bin/yourcommand > /home/username/logfile.txt

단일 > 기호를 사용하면 명령이 실행될 때마다 파일을 덮어씁니다. 이를 방지하려면 >>를 대신 사용하십시오. 기존 파일에 출력을 추가합니다.

Cron이 작동하지 않는다면?

몇 가지 작업을 추가하고 시스템 로그를 확인한 결과 제대로 실행되지 않는 것을 발견했을 수 있습니다. 다음은 문제를 해결할 때 고려해야 할 사항과 주의해야 할 사항입니다.

크론 서비스가 실행 중입니까?

아시다시피 cron 데몬은 백그라운드에서 실행 중이어야 합니다. 이것이 정말로 사실인지 확인하십시오. 서비스는 cron 또는 그냥 cron이라고 합니다.

systemd를 사용하는 배포판의 경우:

systemctl status cron

Upstart를 사용하는 배포의 경우:

service cron status

배포판에서 '이전' System V init 접근 방식을 사용하는 경우 다음을 사용하여 모든 서비스를 나열합니다.

PS4 홈 화면을 구성하는 방법
initctl list

cron이 나열되어 있는지 확인하십시오.

crontab 파일을 가질 수 있습니까?

당신의

/etc

이름이 지정된 파일의 폴더

cron.allow

그리고

cron.deny

. Ubuntu에서는 둘 다 존재해서는 안 됩니다. 즉, 모든 사용자가 cron 작업을 관리할 수 있습니다. 그러나

부팅 디스크를 만드는 방법
cron.allow

파일에는 사용자 이름이 포함되어야 합니다. 반대로 만약

cron.deny

파일이 존재하면 사용자 이름이 파일에 없어야 합니다. 떠나는

cron.deny

파일이 비어 있음은 루트 및 사용자만 나열된 것을 의미합니다.

cron.allow

crontab 파일을 가질 수 있습니다.

변수가 제대로 설정되어 있습니까?

Crontab은 자동으로 SHELL 변수를 다음으로 설정합니다.

/bin/sh

. 그러나 만약 당신의 선택의 껍질은 물고기입니다 또는 bash를 사용하려면 SHELL 변수를 변경해야 합니다.

. 마찬가지로 PATH 변수에는 기본적으로 몇 개의 디렉토리만 포함됩니다. crontab이 Linux 명령을 찾는 곳입니다. cron 작업이 실행되지 않는 경우 crontab이 사용한 명령을 '보지' 않기 때문일 수 있습니다. 이를 방지하려면 명령이 포함된 디렉토리를 콜론으로 구분하여 PATH 변수에 추가하십시오.

경로=/opt/myapp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

crontab에서 이것을 편집하지 않으려면 cron 작업으로 실행하려는 스크립트에서 이러한 변수를 정의할 수 있습니다.

crontab 형식이 적절합니까?

Crontab 구문은 순조롭게 진행되지 않습니다. 앞서 언급한 온라인 도구로 확인하더라도 사소한 실수로 인해 cron이 작업을 실행하지 못할 수 있습니다. 주의:

  • crontab 파일 끝에 빈 줄 추가
  • 명령에 백슬래시가 포함된 경우 % 기호를 이스케이프 처리하십시오.
  • #으로 시작하는 별도의 줄로 주석을 작성하십시오. 환경 변수와 같은 줄이나 cron 작업 명령 옆에 주석을 작성하지 마십시오.

꼭 터미널을 사용해야 합니까?

절대적으로하지. KDE 사용자는 다음에서 액세스할 수 있는 KCron으로 cron 작업을 예약할 수 있습니다. 시스템 설정 > 작업 스케줄러 기준 치수. 몇 번의 마우스 클릭만으로 모든 것을 선택하고 조정할 수 있는 간단한 인터페이스를 갖춘 KCron은 사용하기 좋습니다.

그놈을 선호한다면 그놈 일정 당신을위한 것입니다. 접근 방식은 비슷하지만 인터페이스는 예상대로 약간 다릅니다. 세밀한 수정을 위한 고급 모드를 제공하며 작업을 직접 관리할 수 있는 패널 애플릿과 함께 제공됩니다.

다음과 같은 다른 솔루션을 알고 있어야 합니다. 크론탭-UI 그리고 미니크론 . 여러 컴퓨터와 크론 작업을 관리하는 사용자에게 더 적합하며 가장 멋진 기능 중 하나는 웹 기반 인터페이스입니다.

크론 대안이 있습니까?

cron은 Linux의 거의 표준 작업 스케줄러이지만 확실히 유일한 것은 아닙니다. NS 명령에 특별한 구성 파일 없이 명령줄에서 바로 예약할 수 있는 빠른 일회성 작업에 적합합니다. 더 필요한 경우 있습니다. GNU배치 , 의존성의 개념을 소개합니다. GNUbatch를 사용하면 모든 작업에 대해 특정 조건을 설정하거나 예약된 작업이 이전 작업에 종속되도록 할 수 있습니다. 비슷한 것을 얻을 수 있습니다 시스템 타이머 . cron보다 구성하기가 덜 실용적이지만 systemd 타이머는 컴퓨터가 꺼져 있는 동안 작업이 일정을 놓쳤는지 기억하고 다음에 컴퓨터가 켜져 있을 때 실행할 수 있습니다.

이것은 cron만으로는 할 수 없는 일입니다. 따라서 지속적으로 실행되는 서버와 컴퓨터에 적합하지만 컴퓨터가 꺼져 있는 동안 예약된 작업은 실행하지 않습니다. 여기는 아나크론 재생됩니다. 기술적으로 cron을 대체하거나 '대안'이 아닙니다. 대신 anacron은 cron을 보완하며 함께 사용해야 합니다. 이는 Ubuntu 및 Ubuntu 기반 제품을 비롯한 많은 Linux 배포판의 경우입니다. Anacron은 작업이 마지막으로 실행된 시간을 기록하고 시스템 전원이 꺼진 동안 누락된 인스턴스가 있는지 확인합니다. 컴퓨터를 다시 켤 때 실행되지만 모든 작업은 하루에 한 번만 실행할 수 있습니다.

fcron과 같은 일부 버전의 cron은 기본적으로 anacron의 기능을 제공합니다. 고급 사용자는 다음을 볼 수 있습니다. 크론 또는 슈퍼크론 , 기본 cron 기능에 많은 개선을 가져오지만 관리하기가 다소 어렵습니다.

당신은 어때요? 디지털 작업을 어떻게 구성합니까? Linux에서 어떤 작업을 예약합니까? 의견에 cron 사용에 대한 이야기와 팁을 공유하십시오.

이미지 크레디트: 일정 게시판 Shutterstock을 통한 Gonzalo Aragon

공유하다 공유하다 트위터 이메일 YouTube보다 나은 12개의 비디오 사이트

다음은 YouTube에 대한 몇 가지 대체 비디오 사이트입니다. 그들은 각각 다른 틈새 시장을 차지하지만 책갈피에 추가할 가치가 있습니다.

다음 읽기
관련 항목
  • 리눅스
  • 리눅스
저자 소개 이바나 이사도라 데비치(24개 기사 게재)

Ivana Isadora는 프리랜서 작가이자 번역가이며 Linux 애호가이자 KDE 팬입니다. 그녀는 무료 및 오픈 소스 소프트웨어를 지원하고 홍보하며 항상 신선하고 혁신적인 앱을 찾고 있습니다. 연락 방법 알아보기 여기 .

Ivana Isadora Devcic이 참여한 작품 더보기

뉴스레터 구독

기술 팁, 리뷰, 무료 전자책 및 독점 거래에 대한 뉴스레터에 가입하십시오!

구독하려면 여기를 클릭하세요.