Home Knowledge base Skyline Cloud Ubuntu에서 cron 작업으로 작업 예약하는 방법 KNOWLEDGE BASE

Ubuntu에서 cron 작업으로 작업 예약하는 방법

Ubuntu 22.04/24.04 LTS에서 cron으로 작업을 자동 예약하는 방법을 안내합니다. crontab 문법, 사용자별 및 시스템 전역 작업, 환경 변수와 PATH 함정, 시간대 설정, 로깅과 디버깅까지 실무에 필요한 모든 내용을 다룹니다.

Ubuntu에서 cron 작업으로 작업 예약하는 방법

cron이란 무엇인가?

cron은 모든 Linux 배포판에 기본 내장된 시간 기반 작업 스케줄러입니다. 정해진 시각, 날짜 또는 간격에 따라 명령과 스크립트를 자동으로 실행하므로 백업, 로그 로테이션, 인증서 갱신, 데이터베이스 정리, 애플리케이션 스케줄러 트리거 등에 안성맞춤입니다. Ubuntu에서 이 스케줄러는 cron.service라는 백그라운드 서비스로 실행되며, 실행할 내용은 crontab 이라고 부르는 파일에 정의합니다.

이 가이드에서는 Ubuntu 22.04/24.04 LTS의 사용자별 및 시스템 전역 cron 작업, 정확한 문법, 환경과 로깅을 다루는 방법, 그리고 예약된 작업을 관리형 VPS 또는 클라우드 서버에서 안정적으로 계속 실행하는 방법을 설명합니다.

cron이 설치되어 실행 중인지 확인하기

Ubuntu에서 cron 데몬은 cron 패키지로 제공되며 대개 이미 설치되어 있습니다. 확인해 보세요:

systemctl status cron

Active: active (running)이 표시되어야 합니다. 패키지가 없다면 설치하고 활성화하세요:

sudo apt update && sudo apt install -y cron
sudo systemctl enable --now cron

crontab 문법 이해하기

각 cron 작업은 다섯 개의 시간·날짜 필드 뒤에 실행할 명령이 오는 한 줄로 구성됩니다:

# ┌───────────── minute (0–59)
# │ ┌───────────── hour (0–23)
# │ │ ┌───────────── day of month (1–31)
# │ │ │ ┌───────────── month (1–12)
# │ │ │ │ ┌───────────── day of week (0–7, where 0 and 7 are Sunday)
# │ │ │ │ │
# * * * * *  command to execute

각 필드는 다음을 허용합니다:

연산자 의미 예시
* 모든 값 * * * * * = 매분
, 목록 0,30 * * * * = :00분과 :30분에
- 범위 0 9-17 * * * = 오전 9시~오후 5시 매시
/ 간격(step) */15 * * * * = 15분마다

몇 가지 실제 예시:

0 2 * * *        # every day at 02:00
*/5 * * * *      # every 5 minutes
30 3 * * 1       # 03:30 every Monday
0 0 1 * *        # midnight on the 1st of every month
0 8 * * 1-5      # 08:00 Monday–Friday

다섯 개의 필드 대신 다음 단축 문자열을 사용할 수도 있습니다: @reboot, @hourly, @daily, @weekly, @monthly, @yearly. 예를 들어 @reboot은 서버가 부팅될 때마다 작업을 한 번 실행합니다.

사용자별 cron 작업 만들기

대부분의 애플리케이션 작업은 root가 아닌 일반 사용자로 실행해야 합니다. 다음 명령으로 사용자의 crontab을 편집하세요:

crontab -e

처음 실행하면 편집기를 선택하라는 메시지가 나옵니다(nano가 가장 간단합니다). 작업을 추가하세요 — 예를 들어 매일 오전 1시 30분에 백업 스크립트를 실행하고 그 출력을 로그로 남기려면:

30 1 * * * /home/deploy/scripts/backup.sh >> /home/deploy/logs/backup.log 2>&1

저장하고 종료하세요. cron은 새 스케줄을 즉시 설치하며 재시작이 필요 없습니다. crontab -l로 작업 목록을 확인하고, crontab -r로 모든 작업을 제거할 수 있습니다(주의해서 사용하세요).

>> file 2>&1 부분은 표준 출력과 오류를 모두 로그 파일에 덧붙입니다. 이는 중요합니다. 기본적으로 cron은 출력을 로컬 사용자에게 이메일로 보내는데, 보통은 이를 전혀 보지 못하므로 명시적 로깅이 곧 실패를 디버깅하는 방법이 됩니다.

시스템 전역 작업과 run-parts 디렉터리

root 수준 작업과 패키지에서 제공하는 작업은 /etc/crontab/etc/cron.d/에 위치합니다. 이 파일들은 시간 필드와 명령 사이에 사용자 이름이라는 추가 필드를 하나 더 가집니다:

# m h dom mon dow user  command
0 4 * * * root /usr/local/bin/cleanup.sh

흔한 경우에는 스케줄을 작성할 필요조차 없습니다. Ubuntu는 다음 디렉터리에 넣은 것을 정해진 주기로 실행합니다:

/etc/cron.hourly/
/etc/cron.daily/
/etc/cron.weekly/
/etc/cron.monthly/

실행 가능한 스크립트(확장자 없이, chmod +x)를 /etc/cron.daily/에 두면 하루에 한 번 실행됩니다. 이것이 유지보수 스크립트를 배포하는 가장 깔끔한 방법입니다.

환경과 PATH 관련 함정

작업이 "내 셸에서는 되는데 cron에서는 안 되는" 가장 흔한 이유는 환경입니다. cron은 최소한의 PATH(보통 /usr/bin:/bin)로 실행되며 여러분의 .bashrc나 프로필을 불러오지 않습니다. 두 가지 해결책이 있습니다:

  1. 바이너리와 파일에는 항상 절대 경로를 사용하세요(php가 아니라 /usr/bin/php).
  2. crontab 맨 위에 변수를 설정하세요:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=ops@example.com
SHELL=/bin/bash

*/10 * * * * cd /var/www/app && /usr/bin/php artisan schedule:run >> /var/log/app-cron.log 2>&1

참고로 MAILTO=""는 모든 이메일을 비활성화하며, 주소를 지정하면 메일러가 구성되어 있을 경우 작업 출력을 그 주소로 보냅니다.

시간대

cron은 여러분의 로컬 시간대가 아니라 서버의 시스템 시간대를 사용합니다 — 팀은 리야드에 있는데 VPS는 기본값이 UTC일 때 잊기 쉬운 부분입니다. 확인하고 설정하세요:

timedatectl                      # shows current time zone
sudo timedatectl set-timezone Asia/Riyadh

시간대를 변경한 후에는 실행 중인 작업이 이를 반영하도록 cron을 재시작하세요: sudo systemctl restart cron. 서버를 국내(In-Kingdom)에 호스팅하면 자연스럽게 리야드 시간과 PDPL 데이터 거주 요건에 맞춰집니다.

작업 검증 및 디버깅

Ubuntu에서 cron 활동은 시스템 저널과 /var/log/syslog에 기록됩니다(기본적으로 별도의 /var/log/cron은 없습니다). 실행 상황을 실시간으로 확인하세요:

grep CRON /var/log/syslog | tail
journalctl -u cron --since "1 hour ago"

작업이 실행되지 않는다면 다음 순서로 점검하세요: cron 서비스가 실행 중인지, 해당 줄에 정확히 다섯 개의 시간 필드(또는 하나의 @ 문자열)가 있는지, 스크립트가 실행 가능한지, 그리고 로그 파일에 명령 출력이 나타나는지. 스크립트가 cron의 축소된 환경에서도 동작함을 증명하려면 env -i /bin/bash -c '/path/to/script.sh'로 테스트하세요.

cron 사용자 제한하기

어떤 사용자가 crontab을 설치할 수 있는지 제어하려면 /etc/cron.allow(화이트리스트) 또는 /etc/cron.deny(블랙리스트)를 생성하세요. /etc/cron.allow가 존재하면 목록에 있는 사용자만 crontab을 사용할 수 있으며, 이는 공유 서버에서 합리적인 보안 강화 조치입니다.

Skyline Cloud에서 안정적으로 실행하기

cron 작업은 그것이 실행되는 서버만큼만 신뢰할 수 있습니다. Skyline Cloud VPS 또는 클라우드 서버에서는 예약된 백업, 보고서 생성, 갱신 작업이 사우디 데이터 센터에 호스팅된 상시 가동 인프라 위에서 실행되며, 현지 아랍어 지원과 PDPL/NCA에 부합하는 데이터 거주성을 제공합니다. 여기에 Skyline 비즈니스 이메일 호스팅을 함께 사용하면 실패한 작업에 대한 MAILTO 알림이 실제로 팀에 전달됩니다.

국내(In-Kingdom) 인프라에서 워크로드를 자동화할 준비가 되셨나요? Skyline Cloud 계정을 만들고 몇 분 안에 VPS를 배포하세요.

SKYLINE Engineering

@skyline

The engineering team at SKYLINE Industrial Solutions. We publish field-tested guides drawn from real KSA and GCC deployments.

See author profile
SKYLINE engineering services

Need this implemented for you?

Reading is free — building it right takes a team. SKYLINE engineers ship Skyline Cloud for Aramco vendors, banks, hospitals and government agencies across Saudi Arabia. Talk to us before you start.

Aramco Approved Contractor ISO 9001 · ISO 27001 SAMA CSF aligned NCA ECC ready 247+ KSA clients

Comments

0 total · 0 threads
Be the first to leave a comment.