콘텐츠로 이동

작업 관리

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


목표: 이 문서에서는 미래의 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
옵션 설명
-e vi로 일정 파일 편집
-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
필드 설명 세부 사항
1 0에서 59까지
2 시간 0에서 23까지
3 1에서 31까지
4 1에서 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일 자정 직후에 명령을 실행
@annually 1월 1일 자정 직후에 실행

작업 실행 프로세스

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

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

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

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

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

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