작업 관리¶
이 문서에서는 예약된 작업을 관리하는 방법에 대해 알아보겠습니다.
목표: 이 문서에서는 미래의 Linux 관리자가 다음을 수행하는 방법을 배웁니다:
Linux는 작업 스케줄링 처리하는 방법 cron
을 특정 사용자에게 제한하는 방법 작업 예약하기
crontab, crond, scheduling, linux
지식:
복잡성:
소요 시간: 15분
개요¶
작업 스케줄링은 cron
유틸리티를 사용하여 관리됩니다. 이를 통해 주기적으로 작업을 실행할 수 있습니다.
시스템 작업을 위해서는 관리자만 사용할 수 있지만 일반 사용자는 액세스 가능한 작업 또는 스크립트에 대해 사용할 수 있습니다. cron
유틸리티에 액세스하려면 crontab
을 사용합니다.
cron
서비스는 다음 용도로 사용됩니다:
- 반복적인 관리 작업;
- 백업;
- 시스템 활동 모니터링;
- 프로그램 실행.
crontab
은 cron 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.allow
및 cron.deny
파일¶
파일 /etc/cron.allow
이 파일에 포함된 사용자만 cron
을 사용할 수 있습니다.
존재하고 비어 있으면 어떤 사용자도 cron
을 사용할 수 없습니다.
주의
cron.allow
가 있는 경우 cron.deny
는 무시됩니다.
파일 /etc/cron.deny
이 파일의 사용자는 cron
을 사용할 수 없습니다.
비어 있으면 모든 사용자가 cron
을 사용할 수 있습니다.
기본적으로 /etc/cron.deny
는 존재하고 비어 있으며 /etc/cron.allow
파일이 존재하지 않습니다.
사용자 허용¶
user1만 cron
을 사용할 수 있게 설정합니다.
[root]# vi /etc/cron.allow
user1
사용자 금지¶
user2만 cron
을 사용할 수 없습니다.
[root]# vi /etc/cron.down
user2
cron.allow
파일이 존재하지 않아야 합니다.
작업 예약¶
사용자가 작업을 예약하면 자신의 이름으로 파일이 /var/spool/cron/
아래에 생성됩니다.
이 파일에는 이 사용자가 만든 모든 작업에 대한 crond
가 알아야 할 모든 정보, 실행할 명령 또는 프로그램, 실행할 시간(시간, 분, 날짜...)이 포함됩니다.
crontab
명령¶
crontab
명령은 예약 파일을 관리하는 데 사용됩니다.
crontab [-u user] [-e | -l | -r]
예시:
[root]# crontab -u user1 -e
옵션 | 설명 |
---|---|
-e |
vi로 일정 파일 편집 |
-l |
일정 파일의 내용을 표시 |
-u |
일정 파일을 조작할 사용자의 이름 설정 |
-r |
일정 파일 삭제 |
주의
옵션이 없는 crontab
은 이전 예약 파일을 삭제하고 사용자가 새 줄을 입력할 때까지 기다립니다. 이 편집 모드를 종료하려면 ctrl + d</kbd>를 눌러야 합니다.
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
)에 체계적으로 보고합니다.