리눅스 서버 배치 작업 스케줄링

리눅스 서버에서는 여러 작업들을 자동으로 실행하기 위해 스케줄링이라는 기능을 사용할 수 있습니다. 스케줄링은 특정 시간에 일련의 작업을 실행하도록 예약하는 것을 말합니다. 이를 통해 시스템의 자원을 효율적으로 활용하고, 일상적인 반복 작업을 자동화할 수 있습니다. 이번 포스트에서는 리눅스에서 사용되는 스케줄링 도구인 crontabsystemd 타이머에 대해 알아보겠습니다.

Crontab을 이용한 스케줄링

Crontab은 리눅스에서 가장 대표적으로 사용되는 스케줄링 도구입니다. Crontab은 사용자가 지정한 시간에 주기적으로 반복하는 작업을 실행할 수 있습니다. 아래는 Crontab의 기본적인 문법입니다.

* * * * * command_to_be_executed

Crontab은 다섯 개의 필드로 이루어져 있으며, 각 필드는 공백으로 구분됩니다.

  1. 분 (0-59)
  2. 시 (0-23)
  3. 일 (1-31)
  4. 월 (1-12)
  5. 요일 (0-7): 일요일(0)부터 시작, 7은 일요일의 축약형으로도 표시됩니다.

각 필드는 숫자나 *을 사용하여 설정합니다. *은 해당 필드를 모든 값으로 설정한다는 의미입니다. 예를 들어, * * * * *는 매 분마다 작업을 실행하라는 의미입니다.

이제 예시를 통해 Crontab을 사용해보겠습니다. 아래의 명령어를 입력하여, 현재 유저의 Crontab 편집기를 실행합니다:

crontab -e

여기서 매 분마다 “Hello, World!”를 출력하는 작업을 생성해보겠습니다. 편집기에 아래와 같이 입력한 후 저장합니다.

* * * * * echo "Hello, World!"

이제 설정한 대로 Crontab 작업이 실행됩니다. 작업이 잘 동작하는지 확인하기 위해 로그를 확인할 수도 있습니다. /var/log/syslog 파일을 확인하면 작업 실행 로그를 확인할 수 있습니다.

Systemd 타이머를 이용한 스케줄링

리눅스에서는 systemd라는 초기화 시스템을 사용하고 있습니다. Systemd를 통해 더 강력하고 유연한 스케줄링이 가능한데, 그 중 하나가 systemd 타이머입니다. systemd 타이머는 Crontab과 마찬가지로 특정 작업을 주기적으로 실행할 수 있게 해줍니다.

Systemd 타이머는 타이머 유닛(.timer)과 작업 유닛(.service)으로 구성됩니다. 타이머 유닛은 작업을 언제 실행할지를 정의하고, 작업 유닛은 해당 작업의 실행 내용을 정의합니다.

아래는 systemd 타이머의 예시입니다.

[Unit]
Description=My Timer

[Timer]
OnCalendar=*-*-* 00:00:00
Unit=my-task.service

[Install]
WantedBy=timers.target

이 예시에서는 매일 자정에 my-task.service를 실행하는 타이머를 정의하고 있습니다. 이제 작업 유닛(my-task.service)을 생성하여 작업 내용을 정의해야 합니다.

[Unit]
Description=My Task

[Service]
Type=oneshot
ExecStart=/bin/echo "Hello, World!"

ExecStart 부분은 실행할 명령을 정의하는 곳입니다. 위에서는 “Hello, World!”를 출력하도록 정의하였습니다.

이제 systemctl을 통해 타이머를 활성화하고 작업을 실행할 수 있습니다. 아래의 명령어를 순서대로 입력합니다.

sudo cp my-timer.timer /etc/systemd/system/
sudo cp my-task.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable my-timer.timer
sudo systemctl start my-timer.timer

위 명령을 입력하면 타이머가 활성화되고, 매일 자정에 “Hello, World!”가 출력됩니다. 이를 통해 원하는 작업을 자동으로 실행시킬 수 있습니다.

마치며

리눅스 서버에서 스케줄링을 통해 작업을 자동 실행하는 방법을 알아보았습니다. Crontab과 systemd 타이머는 각각 다른 기능과 장점을 가지고 있으며, 상황에 맞게 적절한 도구를 선택하여 사용할 수 있습니다. 스케줄링을 통해 반복적이고 일상적인 작업을 자동화함으로써 시스템 운영의 효율성을 높일 수 있습니다.