본문 바로가기
카테고리 없음

서버에서 cron, at, systemd timer 차이와 실전 활용 – 작업 예약 완전 정복

by 트렌드 관찰자 2025. 7. 18.
반응형

 

 

서버 관리에서 반복 작업이나 특정 시점에 한 번만 실행해야 하는 작업을 예약하는 일은 매우 중요합니다. 이를 위해 cron, at, systemd timer 같은 도구들이 존재하죠. 각각의 특징과 장단점을 알고 적재적소에 활용하면 서버 자동화가 훨씬 수월해집니다.

 

오늘은 세 가지 도구의 차이점과 실전 사용법을 비교하며, 여러분의 서버 환경에 맞는 최적의 작업 예약 방법을 제안해 드릴게요.

cron이란?

cron은 주기적으로 반복되는 작업을 예약할 때 가장 널리 쓰이는 도구입니다. crontab 파일에 시간과 명령을 설정해, 매분, 매시간, 매일 등 원하는 주기로 작업이 자동 실행됩니다.

at이란?

at는 특정 시간에 단 한 번만 작업을 실행하는 데 특화된 도구입니다. 예약한 시간에 딱 한 번 명령이 실행되고, 이후에는 자동으로 사라집니다. 간단한 일회성 작업 예약에 적합하죠.

systemd timer란?

systemd timer는 systemd 서비스 매니저와 연동되어 동작하는 예약 도구로, cron보다 더 세밀한 제어가 가능하며, 서비스 단위 관리와 결합해 고급 자동화를 지원합니다. 부팅 후 지연 실행, 특정 서비스 상태에 따른 실행 등 복잡한 조건도 설정할 수 있어요.

차이점 비교

기능 cron at systemd timer
주기적 실행 O (분, 시, 일 등 반복) X (한 번 실행) O (유연한 주기 설정 가능)
단일 실행 X O O
서비스 연동 X X O (systemd 서비스와 밀접 연동)
로그 관리 시스템 로그 또는 별도 설정 필요 기본 없음 journalctl로 통합 관리 가능
복잡한 조건 지원 제한적 불가능 높음

실전 활용 예제

1. cron – 매일 새벽 3시에 백업 스크립트 실행

0 3 * * * /usr/local/bin/backup.sh

2. at – 오늘 오후 5시에 임시 작업 실행

echo "/usr/local/bin/temp_task.sh" | at 17:00

3. systemd timer – 매 15분마다 로그 정리 서비스 실행

[Unit]
Description=로그 정리 서비스 실행

[Service]
Type=oneshot
ExecStart=/usr/local/bin/clean_logs.sh

[Install]
WantedBy=multi-user.target
[Unit]
Description=로그 정리 타이머

[Timer]
OnCalendar=*:0/15
Persistent=true

[Install]
WantedBy=timers.target

위 두 파일을 각각 clean_logs.service, clean_logs.timer로 저장 후, systemctl 명령으로 활성화할 수 있습니다.

💡 실전 팁 – 예약 작업 관리

  • cron: crontab -l로 예약 목록 확인, crontab -e로 편집하세요.
  • at: atq로 예약 대기 목록 확인, atrm [job_id]로 취소합니다.
  • systemd timer: systemctl list-timers로 활성 타이머를 확인할 수 있습니다.
  • 로그 확인: systemd timer는 journalctl -u [서비스명]로 로그를 확인하세요.

⚠️ 주의사항

  • 환경 변수: cron과 at는 제한된 환경 변수에서 실행되므로, 스크립트 내에 필요한 환경 설정을 명시하세요.
  • 권한: 예약 작업의 실행 권한과 소유자를 반드시 확인해야 합니다.
  • 시간대: 서버의 시간대 설정이 예약 작업에 영향을 줄 수 있으니 항상 확인하세요.

FAQ

  • Q. cron과 systemd timer 중 무엇을 선택해야 하나요?
    A. 간단한 주기적 작업은 cron, 복잡한 조건과 서비스 연동이 필요하면 systemd timer가 적합합니다.
  • Q. at 작업이 취소되지 않아요. 어떻게 하나요?
    A. atq로 작업 ID를 확인한 뒤, atrm [job_id]로 삭제할 수 있습니다.
  • Q. systemd timer 설정 후 바로 작동하지 않아요.
    A. systemctl enable [timer명]systemctl start [timer명] 명령을 반드시 실행하세요.
  • Q. cron 예약 작업 로그는 어디서 확인하나요?
    A. 기본적으로 /var/log/syslog 또는 /var/log/cron 파일에서 확인할 수 있습니다.
  • Q. 특정 사용자로 예약 작업을 실행하려면 어떻게 해야 하나요?
    A. crontab -u 사용자명 -e 또는 systemd 서비스 단위에 User=사용자명 옵션을 추가하세요.

작업 예약 도구들은 각각의 특성과 장점이 있습니다. 자신의 서버 환경과 업무 요구에 맞춰 현명하게 선택하고, 안정적인 자동화를 완성해 보세요.

 

반응형