콘텐츠로 이동

작업 관리

이 문서에서는 예약된 작업을 관리하는 방법에 대해 알아보겠습니다.


목표: 이 문서에서는 미래의 Linux 관리자가 다음을 수행하는 방법을 배웁니다:

✔ Linux는 작업 스케줄링 처리하는 방법 ✔ cron을 특정 사용자에게 제한하는 방법 ✔ 작업 예약하기

🏁 crontab, crond, scheduling, linux

지식: ⭐ ⭐
복잡성: ⭐ ⭐

소요 시간: 15분


개요

작업 스케줄링은 cron 유틸리티를 사용하여 관리됩니다. 이를 통해 주기적으로 작업을 실행할 수 있습니다.

시스템 작업을 위해서는 관리자만 사용할 수 있지만 일반 사용자는 액세스 가능한 작업 또는 스크립트에 대해 사용할 수 있습니다. cron 유틸리티에 액세스하려면 crontab을 사용합니다.

cron 서비스는 다음 용도로 사용됩니다:

  • 반복적인 관리 작업;
  • 백업;
  • 시스템 활동 모니터링;
  • 프로그램 실행.

crontabcron table의 줄임말이지만 작업 예약 테이블로 생각할 수 있습니다.

주의

일정을 설정하려면 시스템에 정확한 시간이 설정되어 있어야 합니다.

서비스 작동 방식

cron 서비스는 메모리에 존재하는 crond 데몬에 의해 실행됩니다.

상태를 확인하려면 다음을 사용합니다:

[root] # systemctl status crond

crond 데몬이 실행되지 않으면 수동으로 초기화하거나 자동으로 시작해야 합니다. 예약된 작업이 있더라도 실행되지 않을 것입니다.

수동으로 crond 데몬 초기화하는 방법:

[root]# systemctl {status|start|restart|stop} crond

시작 시 crond 데몬 초기화하는 방법:

[root]# systemctl enable crond

보안

일정을 구현하려면 사용자에게 cron 서비스를 사용할 수 있는 권한이 있어야 합니다.

이 권한은 아래 파일에 포함된 정보에 따라 다릅니다.

  • /etc/cron.allow
  • /etc/cron.deny

주의

파일이 없으면 모든 사용자가 cron을 사용할 수 있습니다.

cron.allowcron.deny 파일

파일 /etc/cron.allow

이 파일에 포함된 사용자만 cron을 사용할 수 있습니다.

존재하고 비어 있으면 어떤 사용자도 cron을 사용할 수 없습니다.

주의

cron.allow가 있는 경우 cron.deny무시됩니다.

파일 /etc/cron.deny

이 파일의 사용자는 cron을 사용할 수 없습니다.

비어 있으면 모든 사용자가 cron을 사용할 수 있습니다.

기본적으로 /etc/cron.deny는 존재하고 비어 있으며 /etc/cron.allow 파일이 존재하지 않습니다.

사용자 허용

user1cron을 사용할 수 있게 설정합니다.

[root]# vi /etc/cron.allow
user1

사용자 금지

user2cron을 사용할 수 없습니다.

[root]# vi /etc/cron.down
user2

cron.allow 파일이 존재하지 않아야 합니다.

작업 예약

사용자가 작업을 예약하면 자신의 이름으로 파일이 /var/spool/cron/ 아래에 생성됩니다.

이 파일에는 이 사용자가 만든 모든 작업에 대한 crond가 알아야 할 모든 정보, 실행할 명령 또는 프로그램, 실행할 시간(시간, 분, 날짜...)이 포함됩니다.

Cron 트리

crontab 명령

crontab 명령은 예약 파일을 관리하는 데 사용됩니다.

crontab [-u user] [-e | -l | -r]

예시:

[root]# crontab -u user1 -e
옵션설명
-evi로 일정 파일 편집
-l일정 파일의 내용을 표시
-u일정 파일을 조작할 사용자의 이름 설정
-r일정 파일 삭제

주의

옵션이 없는 crontab은 이전 예약 파일을 삭제하고 사용자가 새 줄을 입력할 때까지 기다립니다. 이 편집 모드를 종료하려면 ctrl + d</kbd&gt를 눌러야 합니다.

root만이 -u user 옵션을 사용하여 다른 사용자의 예약 파일을 관리할 수 있습니다.

위의 예에서는 root가 user1을 위해 작업을 예약할 수 있게 합니다.

crontab 사용

crontab의 용도는 다양하며 다음을 포함합니다.

  • crontab 파일에 대한 수정 사항은 즉시 고려됩니다.
  • 다시 시작할 필요가 없습니다.

반면에 다음 사항을 고려해야 합니다.

  • 프로그램은 자체 실행 가능해야 합니다.
  • 리디렉션(stdin, stdout, stderr)을 제공해야 합니다.
  • 터미널에서 입력/출력 요청을 사용하는 명령을 실행하는 것은 관련이 없습니다.

참고

예약의 목적은 외부 개입 없이 자동으로 작업을 수행하는 것이라는 점을 이해하는 것이 중요합니다.

crontab 파일

crontab 파일은 다음 규칙에 따라 구성됩니다.

  • 이 파일의 각 줄은 예약을 해당합니다.
  • 각 줄에는 6개의 필드가 있으며 시간을 위한 5개 필드와 명령을 위한 1개 필드로 구성됩니다.
  • 각 필드는 공백이나 탭으로 구분됩니다.
  • 각 줄은 줄 바꿈 문자로 끝납니다.
  • #으로 시작하는 줄은 주석 처리됩니다.
[root]# crontab –e
10 4 1 * * /root/scripts/backup.sh
1  2 3 4 5       6
필드설명세부 사항
10에서 59까지
2시간0에서 23까지
31에서 31까지
41에서 12까지
5요일0에서 7까지(0=7=일요일)
6실행할 작업전체 명령 또는 스크립트

주의

실행할 작업은 절대 경로를 사용해야 하며 가능한 경우 리디렉션을 사용해야 합니다.

시간 정의에 대한 표기법을 단순화하기 위해 특수 기호를 사용하는 것이 좋습니다.

와일드카드설명
*필드의 모든 가능한 값
-값의 범위 지정
,값의 목록 지정
/단계를 정의합니다.

예시:

4월 15일 오전 10시 25분에 실행된 스크립트:

25 10 15 04 * /root/scripts/script > /log/…

매일 오전 11시와 오후 4시에 실행:

00 11,16 * * * /root/scripts/script > /log/…

매일 오전 11시부터 오후 4시까지 매시간 실행:

00 11-16 * * * /root/scripts/script > /log/…

근무 시간 동안 10분마다 실행:

*/10 8-17 * * 1-5 /root/scripts/script > /log/…

root 사용자의 경우 crontab에는 몇 가지 특수한 시간 설정이 있습니다:

설정설명
@reboot시스템 재부팅 시 명령 실행
@hourly매시간 명령 실행
@daily매일 자정 직후에 명령 실행
@weekly매주 일요일 자정 직후 명령 실행
@monthly매월 1일 자정 직후에 명령을 실행
@annually1월 1일 자정 직후에 실행

작업 실행 프로세스

사용자 Rockstar는 자신의 crontab 파일을 편집하려고 합니다.

1) crond는 사용자가 허용되는지 확인합니다(/etc/cron.allow/etc/cron.deny).

2) 허용된 경우 사용자는 자신의 crontab 파일(/var/spool/cron/rockstar)에 액세스합니다.

매분 crond는 예약 파일을 읽습니다.

3) 예약된 작업을 실행합니다.

4) 로그 파일(/var/log/cron)에 체계적으로 보고합니다.