운영 체제 별로 다양한 자동화 도구들이 존재하지만, macOS와 Linux와 같은 UNIX 계열의 운영체제에서는 cron이라는 강력한 시스템 도구를 사용하여 일정에 따라 동작하는 자동화 작업을 설정하고 관리할 수 있습니다. 이를 통해 일상적이거나 반복적인 작업을 자동화하고, 시스템 유지 관리를 보다 효율적으로 수행할 수 있습니다.
cron 및 crontab을 활용하는 방법은 매우 간단하지만 막상 사용하기 시작할 때는 몇 가지 중요한 사항을 이해해야 합니다. 이 글에서는 cron 및 crontab의 기본 사용 방법과 중요한 내용을 소개하겠습니다. 이해하면 운영 체제에서 다양한 자동화 작업을 구성할 수 있으며, 작업 스케줄링을 더욱 효율적으로 관리할 수 있게 될 것입니다.
튜토리얼 환경: Ubuntu 22.04
cron
cron은 Unix 및 Unix 계열 운영 체제에서 주기적인 작업을 예약하고 실행하기 위한 스케줄링 시스템입니다. 시스템 레벨에서 백그라운드로 실행되며, 주기적으로 명령어 또는 스크립트를 실행합니다.
cron은 운영 체제에서 자동화된 작업을 예약하고 실행하는 데 필수적인 도구 중 하나이며, 시스템 관리와 작업 스케줄링을 효율적으로 수행하는 데 사용됩니다. 이를 통해 시스템 관리자와 개발자는 반복적이거나 예약된 작업을 간편하게 자동화하고, 시스템의 안정성과 효율성을 향상시킬 수 있으며 다음과 같은 특징이 있습니다.
- 시간 기반 스케줄링: cron은 시간과 날짜를 기반으로 작업을 예약합니다. 이를 통해 정확한 실행 시간을 지정할 수 있어 매일, 매주, 또는 특정 날짜와 시간에 작업을 실행할 수 있습니다.
- 사용자별 스케줄링: 각 사용자는 자신의 crontab 파일을 통해 개별적인 작업을 예약하고 관리할 수 있습니다. 이로 인해 여러 사용자가 동시에 자신의 작업을 관리할 수 있으며, 작업 간 충돌을 방지할 수 있습니다.
- 다양한 주기 지원: cron은 다양한 주기를 지원합니다. 분, 시간, 일, 월, 요일 등의 주기를 설정하여 작업을 예약할 수 있으며, 이를 조합하여 매우 복잡한 스케줄을 만들 수 있습니다.
- 스크립트 및 명령어 실행: cron은 실행할 작업을 스크립트 또는 명령어로 지정할 수 있습니다. 이를 통해 데이터베이스 백업, 로그 파일 정리, 서버 유지 보수 작업 등을 자동으로 수행할 수 있습니다.
- 로그와 알림: cron은 작업 실행 결과를 로그로 남기며, 이를 통해 작업의 성공 또는 실패 여부를 추적할 수 있습니다. 또한, 사용자에게 알림을 보내 작업의 실행 상태를 모니터링할 수 있습니다.
crontab
crontab은 cron 작업을 관리하기 위한 명령어 및 파일입니다. 사용자는 crontab 명령어를 사용하여 자신의 작업 스케줄을 설정하고 관리합니다. crontab을 사용하면 사용자는 cron 작업을 생성, 수정, 삭제하고 해당 작업을 관리할 수 있으며, 다음과 같은 특징이 있습니다.
- 사용자별 작업 관리: 각 사용자는 자신의 crontab 파일을 편집하여 개별 작업을 관리합니다. 이렇게 하면 여러 사용자가 동시에 자신의 작업을 정의하고 관리할 수 있으며, 작업 간의 충돌을 방지할 수 있습니다.
- 편리한 명령어: crontab 명령어를 사용하여 작업을 추가, 수정, 삭제할 수 있어 사용자가 스케줄을 관리하기 편리합니다. 이 명령어를 사용하면 간단한 텍스트 에디터가 열리고, 사용자는 cron 작업의 스케줄과 실행할 명령어를 정의할 수 있습니다.
- 시스템 및 사용자 작업: crontab은 시스템 레벨과 사용자 레벨의 작업을 모두 관리합니다. 시스템 관리자는 시스템 레벨에서 작업을 예약하고 사용자는 자신의 작업을 설정합니다.
- 스케줄 표현식: crontab을 사용하면 사용자는 작업을 실행할 정확한 시간과 날짜를 설정할 수 있도록 스케줄 표현식을 사용할 수 있습니다. 이를 통해 작업을 정확하게 예약할 수 있습니다.
- 작업 모니터링: crontab을 사용하여 정의한 작업은 시스템 로그에 기록되므로 작업의 실행 상태를 추적하고 모니터링할 수 있습니다. 이를 통해 작업의 성공 또는 실패 여부를 확인할 수 있습니다.
crontab
실행 및 작성 방법
cron을 사용한 스크립트 예약 cron은 Unix 기반 시스템에서 널리 사용되는 작업 스케줄러입니다. macOS에서도 cron을 사용하여 스크립트를 정기적으로 실행할 수 있습니다.
crontab
파일 실행
터미널에서 이 명령를 작성하고 실행하면 crontab 설정 파일을 편집할 수 있는 상태로 전환합니다. 만약 처음 실행한 경우 이미지와 같이 에디터를 선택할 수 있는 단계가 보여지게 됩니다.
crontab -e
vi, nano 등 선택한 텍스트 편집기에서 파일이 열리면 일반적으로 위와 유사한 crontab
설정 내용들을 볼 수 있습니다.
cron
명령 추가
crontab파일을 열고 자동으로 동작하도록 할 작업을 등록할 수 있습니다.
여기서 페이지 하단에 다음과 같은 형식의 cron
명령을 하나씩 추가하면 됩니다.
* * * * * /Users/your_username/my_script.sh
* * * * * command-to-be-executed
┬ ┬ ┬ ┬ ┬
│ │ │ │ └───── 분 (0 - 59)
│ │ │ └─────── 시간 (0 - 23)
│ │ └───────── 일 (1 - 31)
│ └─────────── 월 (1 - 12)
└───────────── 요일 (0 - 7, 일요일은 0 또는 7)
기본 적으로 이러한 형태로 되어 있으며 구문 좌측의 *
이 나타내는 의미만 알고 있다면 아주 손쉽게 사용할 수 있습니다.
- 분 (0-59)
- 시간 (0-23)
- 일 (1-31)
- 월 (1-12)
- 요일 (0-7, 일요일은 0 또는 7)
cron
명령 예시
30 4 * * 1 /Users/your_username/my_script.sh
예를 들어, 매주 월요일 오전 4시 30분에 스크립트를 실행하려면 다음과 같이 작성합니다.
30 9 * * * /Users/your_username/my_script.sh
이렇게 작성하면 2023년 10월 15일 오후 3시 45분에 스크립트가 실행됩니다.
0 */2 * * * /Users/your_username/my_script.sh
이렇게 작성하면 2시간마다 스크립트가 실행됩니다.
이제 작성한 스케줄 표현식이 올바르게 입력되었는지 확인하고, 사용 중인 텍스트 에디터의 저장 및 종료 명령을 입력하여 crontab
설정을 저장하고 종료합니다. 모두 제대로 입력 되었다면 이후 cron
이 설정한 시간에 따라 지정한 스크립트를 자동으로 실행하게 됩니다.
로그 기록 확인
작성한 스케줄이 올바르게 동작하는지를 확인하려면 스케줄 시간이 되기를 기다리거나 바로 체크 가능한 시간(5분 뒤 정도)으로 스케줄을 지정하면 되며, 필요한 경우 로그 기록을 통해 결과를 확인할 수 도 있습니다.
sudo cat /var/log/syslog | grep CRON
대부분의 Linux 배포판과 macOS에서는 cron
작업 로그를 /var/log/syslog
또는 /var/log/cron
파일에 저장합니다.
- 이 명령은
cron
과 관련된 로그 항목을 검색합니다. 필요한 경우grep
명령어를 사용하여 로그를 필터링하고 특정 작업에 대한 정보를 확인할 수 있습니다. - 일부 Linux 배포판은
cron
로그를 다른 위치에 저장할 수 있으며, 로그 파일의 경로는 배포판마다 다를 수 있습니다. 대표적인 예로, Ubuntu에서는/var/log/syslog
를 사용하지만, 다른 배포판에서는 다른 위치일 수 있습니다.
터미널에서 위 명령어를 사용하면 로그 파일을 확인할 수 있고 일반적으로 다음과 같이 반환됩니다.
Sep 25 04:30:01 your_hostname CRON[12345]: (username) CMD (/path/to/your_script.sh)