탐색 링크 건너뛰기 | |
인쇄 보기 종료 | |
Oracle Solaris 11.1에서 시스템 정보, 프로세스 및 성능 관리 Oracle Solaris 11.1 Information Library (한국어) |
이 절에는 crontab 파일을 사용하여 시스템 작업을 예약하기 위한 작업이 포함됩니다.
|
다음 단원에서는 crontab 파일을 만들고, 편집, 표시, 제거하는 방법과 이들의 액세스를 제어하는 방법을 설명합니다.
cron 데몬은 각 crontab 파일에서 발견된 명령에 따라 시스템 작업을 예약합니다. crontab 파일은 정기적 간격으로 실행될 명령들(한 라인에 명령 하나씩)로 구성됩니다. 각 라인의 시작 부분은 명령을 실행할 때 cron 데몬을 알려주는 날짜 및 시간 정보를 포함합니다.
예를 들어, root라는 crontab 파일이 SunOS 소프트웨어 설치 중 제공됩니다. 파일 내용에 다음 명령줄이 포함됩니다.
10 3 * * * /usr/sbin/logadm (1) 15 3 * * 0 /usr/lib/fs/nfs/nfsfind (2) 1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1 (3) 30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean (4)
다음은 이러한 명령줄의 출력을 설명합니다.
첫번째 라인은 매일 오전 3:10에 logadm 명령을 실행합니다.
두번째 라인은 매주 일요일 오전 3:15에 nfsfind 스크립트를 실행합니다.
세번째 라인은 매일 오전 2:10에 일광 절약 시간을 검사하는(필요한 경우 수정하는) 스크립트를 실행합니다.
RTC 시간대나 /etc/rtc_config 파일이 없는 경우 이 항목은 아무것도 아닙니다.
x86 전용 - /usr/sbin/rtc 스크립트는 x86 기반 시스템에서만 실행할 수 있습니다.
네번째 라인은 매일 오전 3:30에 일반 보안 서비스 테이블 /etc/gss/gsscred_db에서 중복 항목을 검사하고 제거합니다.
crontab 파일 내의 라인 구문에 대한 자세한 내용은 crontab 파일 항목의 구문을 참조하십시오.
crontab 파일은 /var/spool/cron/crontabs 디렉토리에 저장됩니다. root 외에 여러 crontab 파일이 SunOS 소프트웨어 설치 중 제공됩니다. 다음 표를 참조하십시오.
표 4-2 기본 crontab 파일
|
기본 crontab 파일 외에, 사용자는 crontab 파일을 만들어 자신의 시스템 작업을 예약할 수 있습니다. 다른 crontab 파일은 bob, mary, smith, jones와 같은 생성된 사용자 계정에서 이름을 따옵니다.
root 또는 다른 사용자에 속하는 crontab 파일에 액세스하려면 수퍼유저 권한이 필요합니다.
crontab 파일을 만들고, 편집, 표시, 제거하는 방법을 설명하는 절차는 후속 단원에서 설명합니다.
cron 데몬은 crontab 명령의 자동 예약을 관리합니다. cron 데몬의 역할은 /var/spool/cron/crontab 디렉토리에 crontab 파일이 있는지 검사하는 것입니다.
cron 데몬은 시작 시 다음 작업을 수행합니다.
새 crontab 파일을 검사합니다.
파일 내에 나열된 실행 시간을 읽습니다.
적절한 시간에 실행할 명령을 제출합니다.
업데이트된 crontab 파일에 관해 crontab 명령에서 알림을 받습니다.
대부분 똑같은 방법으로 cron 데몬은 at 파일의 예약을 제어합니다. 이러한 파일은 /var/spool/cron/atjobs 디렉토리에 저장됩니다. 또한 cron 데몬은 제출된 at 작업에 관해 crontab 명령에서 알림을 받습니다.
crontab 파일은 각 명령줄의 처음 5개 필드로 지정된 시간에 자동으로 실행하는 명령들(한 라인에 명령 하나씩)로 구성됩니다. 다음 표에 설명된 이러한 5개 필드는 공백으로 구분됩니다.
표 4-3 crontab 시간 필드에 허용 가능한 값
|
crontab 시간 필드에서 특수 문자를 사용할 때 다음 지침을 따르십시오.
공백을 사용하여 각 필드를 구분합니다.
콤마를 사용하여 여러 값을 구분합니다.
하이픈을 사용하여 값 범위를 지정합니다.
별표를 와일드카드로 사용하여 모든 가능한 값을 포함합니다.
라인 시작 부분에 주석 마크(#)를 사용하여 주석이나 빈 라인을 나타냅니다.
예를 들어, 다음 crontab 명령 입력은 매월 1일과 15일, 오후 4시에 사용자 콘솔 창에 미리 알림을 표시합니다.
0 16 1,15 * * echo Timesheets Due > /dev/console
crontab 파일의 각 명령은 너무 길더라도 한 라인씩 구성해야 합니다. crontab 파일은 여분의 캐리지 리턴을 인식하지 않습니다. crontab 항목 및 명령 옵션에 대한 자세한 내용은 crontab(1) 매뉴얼 페이지를 참조하십시오.
crontab 파일을 만드는 가장 간단한 방법은 crontab -e 명령을 사용하는 것입니다. 이 명령은 시스템 환경에 설정된 텍스트 편집기를 호출합니다. 시스템 환경의 기본 편집기는 EDITOR 환경 변수에 정의됩니다. 이 변수가 설정되지 않은 경우 crontab 명령이 기본 편집기인 ed를 사용합니다. 가급적 잘 아는 편집기를 선택해야 합니다.
다음 예는 편집기가 정의되었는지 확인하는 방법과 vi를 기본값으로 설정하는 방법을 보여줍니다.
$ which $EDITOR $ $ EDITOR=vi $ export EDITOR
crontab 파일을 만들 때 /var/spool/cron/crontabs 디렉토리에 자동으로 놓이고 사용자 이름이 부여됩니다. 루트 권한이 있는 경우 다른 사용자 또는 root에 대해 crontab 파일을 만들거나 편집할 수 있습니다.
시작하기 전에
root 또는 다른 사용자에 속하는 crontab 파일을 만들거나 편집하는 경우 root 역할을 가져야 합니다. Oracle Solaris 11.1 관리: 보안 서비스의 지정된 관리 권한을 사용하는 방법을 참조하십시오.
자신의 고유 crontab 파일을 편집할 때는 root 역할을 가질 필요가 없습니다.
# crontab -e [username]
여기서 username은 crontab 파일을 만들거나 편집할 사용자 계정의 이름을 지정합니다. 수퍼유저 권한 없이 자신의 crontab 파일을 만들 수 있지만, root 또는 다른 사용자의 crontab 파일을 만들거나 편집하려면 수퍼유저 권한이 있어야 합니다.
crontab 파일 항목의 구문에 설명된 구문을 따릅니다. crontab 파일은 /var/spool/cron/crontabs 디렉토리에 놓입니다.
# crontab -l [username]
예 4-1 crontab 파일 만들기
다음 예는 다른 사용자의 crontab 파일을 만드는 방법을 보여줍니다.
# crontab -e jones
새 crontab 파일에 자동으로 추가된 다음 명령 입력은 매주 일요일 아침, 오전 1:00에 사용자의 홈 디렉토리에서 로그 파일을 제거합니다. 명령 입력이 출력을 재지정하지 않기 때문에 *.log 뒤의 명령줄에 재지정 문자가 추가됩니다. 이렇게 하면 명령이 올바르게 실행됩니다.
# This command helps clean up user accounts. 1 0 * * 0 rm /home/jones/*.log > /dev/null 2>&1
$ ls -l /var/spool/cron/crontabs
crontab 파일을 표시하는 방법에 설명된 crontab -l 명령을 사용하여 사용자의 crontab 파일 내용을 확인합니다.
crontab -l 명령은 cat 명령이 다른 유형의 파일 내용을 표시하는 것과 똑같은 방법으로 crontab 파일의 내용을 표시합니다. 이 명령을 사용하기 위해 디렉토리를 /var/spool/cron/crontabs(여기에 crontab 파일이 위치함)로 변경할 필요는 없습니다.
기본적으로 crontab -l 명령은 자신의 crontab 파일을 표시합니다. 다른 사용자에 속하는 crontab 파일을 표시하려면 수퍼유저여야 합니다.
시작하기 전에
root 또는 다른 사용자에게 속하는 crontab 파일을 표시하려면 root 역할을 맡습니다. Oracle Solaris 11.1 관리: 보안 서비스의 지정된 관리 권한을 사용하는 방법을 참조하십시오.
자신의 고유 crontab 파일을 표시할 때는 root 역할을 가질 필요가 없습니다.
# crontab -l [username]
여기서 username은 crontab 파일을 표시할 사용자 계정의 이름을 지정합니다. 다른 사용자의 crontab 파일을 표시하려면 수퍼유저 권한이 필요합니다.
주의 - 실수로 crontab 명령을 아무 옵션 없이 입력한 경우 편집기의 인터럽트 문자를 누르십시오. 이 문자는 변경 사항을 저장하지 않고 종료하도록 허용합니다. 대신, 변경 사항을 저장하고 파일을 종료한 경우 기존 crontab 파일이 빈 파일로 겹쳐 쓰입니다. |
예 4-2 crontab 파일 표시
이 예는 crontab -l 명령을 사용하여 사용자의 기본 crontab 파일의 내용을 표시하는 방법을 보여줍니다.
$ crontab -l 13 13 * * * chmod g+w /home1/documents/*.book > /dev/null 2>&1
예 4-3 기본 root crontab 파일 표시
이 예는 기본 root crontab 파일을 표시하는 방법을 보여줍니다.
$ suPassword: # crontab -l #ident "@(#)root 1.19 98/07/06 SMI" /* SVr4.0 1.1.3.1 */ # # The root crontab should be used to perform accounting data collection. # # 10 3 * * * /usr/sbin/logadm 15 3 * * 0 /usr/lib/fs/nfs/nfsfind 30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean #10 3 * * * /usr/lib/krb5/kprop_script ___slave_kdcs___
예 4-4 다른 사용자의 crontab 파일 표시
이 예는 다른 사용자에 속하는 crontab 파일을 표시하는 방법을 보여줍니다.
$ su Password: # crontab -l jones 13 13 * * * cp /home/jones/work_files /usr/backup/. > /dev/null 2>&1
기본적으로 crontab 파일 보호가 설정되므로 rm 명령으로 crontab 파일을 부주의하게 삭제할 수 없습니다. 대신, crontab -r 명령을 사용하여 crontab 파일을 제거하십시오.
기본적으로 crontab -r 명령은 자신의 crontab 파일을 제거합니다.
이 명령을 사용하기 위해 디렉토리를 /var/spool/cron/crontabs(여기에 crontab 파일이 위치함)로 변경할 필요는 없습니다.
시작하기 전에
root 또는 다른 사용자에게 속하는 crontab 파일을 제거하려면 root 역할을 맡습니다. 역할에는 권한 부여 및 권한이 있는 명령이 포함됩니다. Oracle Solaris 11.1 관리: 보안 서비스의 지정된 관리 권한을 사용하는 방법을 참조하십시오.
자신의 고유 crontab 파일을 제거할 때는 root 역할을 가질 필요가 없습니다.
# crontab -r [username]
여기서 username은 crontab 파일을 제거할 사용자 계정의 이름을 지정합니다. 다른 사용자의 crontab 파일을 제거하려면 수퍼유저 권한이 필요합니다.
주의 - 실수로 crontab 명령을 아무 옵션 없이 입력한 경우 편집기의 인터럽트 문자를 누르십시오. 이 문자는 변경 사항을 저장하지 않고 종료하도록 허용합니다. 대신, 변경 사항을 저장하고 파일을 종료한 경우 기존 crontab 파일이 빈 파일로 겹쳐 쓰입니다. |
# ls /var/spool/cron/crontabs
예 4-5 crontab 파일 제거
다음 예에서는 사용자 smith가 crontab -r 명령을 사용하여 자신의 crontab 파일을 제거하는 방법을 보여줍니다.
$ ls /var/spool/cron/crontabs adm jones root smith sys uucp $ crontab -r $ ls /var/spool/cron/crontabs adm jones root sys uucp
/etc/cron.d 디렉토리의 두 파일 cron.deny 및 cron.allow를 사용하여 crontab 명령에 대한 액세스를 제어할 수 있습니다. 이러한 파일은 지정된 사용자만 자신의 crontab 파일 만들기, 편집, 표시, 제거와 같은 crontab 명령 작업을 수행하도록 허용합니다.
cron.deny 및 cron.allow 파일은 사용자 이름 목록(한 라인에 사용자 이름 하나씩)으로 구성됩니다.
이러한 액세스 제어 파일은 다음과 같이 작동합니다.
cron.allow가 있는 경우 이 파일에 나열된 사용자만 crontab 파일을 만들거나, 편집, 표시, 제거할 수 있습니다.
cron.allow가 없는 경우 cron.deny에 나열된 사용자를 제외한 모든 사용자가 crontab 파일을 제출할 수 있습니다.
cron.allow도 없고 cron.deny도 없는 경우 crontab 명령을 실행하려면 수퍼유저 권한이 필요합니다.
cron.deny 및 cron.allow 파일을 편집하거나 만들려면 수퍼유저 권한이 필요합니다.
SunOS 소프트웨어 설치 중 생성된 cron.deny 파일은 다음 사용자 이름을 포함합니다.
$ cat /etc/cron.d/cron.deny daemon bin smtp nuucp listen nobody noaccess
기본 cron.deny 파일의 사용자 이름 중 아무도 crontab 명령에 액세스할 수 없습니다. 이 파일을 편집하여 crontab 명령에 액세스가 거부될 다른 사용자 이름을 추가할 수 있습니다.
기본 cron.allow 파일은 제공되지 않습니다. 그래서 Oracle Solaris 소프트웨어 설치 후에 모든 사용자(기본 cron.deny 파일에 나열된 사용자 제외)가 crontab 명령에 액세스할 수 있습니다. cron.allow 파일을 만들면 이러한 사용자만 crontab 명령에 액세스할 수 있습니다.
Oracle Solaris 11.1 관리: 보안 서비스의 지정된 관리 권한을 사용하는 방법을 참조하십시오.
$ su - Password: #
daemon bin smtp nuucp listen nobody noaccess username1 username2 username3 . . .
# cat /etc/cron.d/cron.deny daemon bin nuucp listen nobody noaccess
root를 파일에 추가하지 않으면 crontab 명령에 대한 수퍼유저 액세스가 거부됩니다.
crontab 명령을 사용하도록 허용될 사용자를 넣습니다.
root username1 username2 username3 . . .
예 4-6 crontab 명령 액세스를 지정된 사용자로 제한
다음 예는 사용자 이름 jones, temp, visitor가 crontab 명령에 액세스하지 못하게 막는 cron.deny 파일을 보여줍니다.
$ cat /etc/cron.d/cron.deny daemon bin smtp nuucp listen nobody noaccess jones temp visitor
다음 예는 cron.allow 파일을 보여줍니다. 사용자 root, jones 및 smith는 crontab 명령에 액세스할 수 있는 유일한 사용자입니다.
$ cat /etc/cron.d/cron.allow root jones smith
특정 사용자가 crontab 명령에 액세스할 수 있는지 확인하려면 사용자 계정으로 로그인한 동안 crontab -l 명령을 사용합니다.
$ crontab -l
사용자가 crontab 명령에 액세스할 수 있고 이미 crontab 파일을 만든 경우 파일이 표시됩니다. 그렇지 않으면, 사용자가 crontab 명령에 액세스할 수 있지만 crontab 파일이 없어서 다음과 비슷한 메시지가 표시됩니다.
crontab: can't open your crontab file
이 사용자가 cron.allow 파일(존재하는 경우)에 나열되거나 사용자가 cron.deny 파일에 나열되지 않습니다.
사용자가 crontab 명령에 액세스할 수 없을 경우 다음 메시지가 이전 crontab 파일이 존재하는지 여부를 표시합니다.
crontab: you are not authorized to use cron. Sorry.
이 메시지는 사용자가 cron.allow 파일(있는 경우)에 나열되지 않거나 사용자가 cron.deny 파일에 나열되어 있음을 의미합니다.