Cron 작업 대신 Systemd 타이머 사용

Cron 작업 대신 Systemd 타이머 사용
노트북 앞에 앉아 알람시계를 든 여성의 사진입니다.

Linux 사용자라면 아마도 cron에 익숙할 것입니다. cron은 수년간 Unix 시간 기반 작업 스케줄러로 사용되어 왔습니다. 이제 많은 사용자가 cron의 우세를 대체하기 위해 Systemd 타이머를 사용하고 있습니다. 이 문서에서는 자신의 systemd 타이머를 설정하고 시스템에서 제대로 실행되는지 확인하는 기본 사항에 대해 설명합니다.

Cron 대신 Systemd 타이머를 사용하는 이유는 무엇입니까?

Systemd Timers의 가장 큰 판매 포인트 중 하나는 Systemd 생태계에 완전히 통합되어 있다는 것입니다. 즉, 다양한 Systemd 서비스 단위를 함께 예약하고 연결하기가 매우 쉬워 기존 cron 데몬에 비해 작업을 자동화하기가 더 쉽습니다.

Systemd 타이머를 사용하여 시스템 서비스를 보여주는 터미널.

Cron에 비해 Systemd Timers의 또 다른 장점은 예약된 작업을 트리거하는 방법에 대한 보다 자세한 제어를 제공한다는 것입니다. 예를 들어, Systemd Timers에는 OnBootSec성공적인 부팅 후 특정 시간이 지날 때까지 서비스 단위를 지연시킬 수 있는 변수가 있습니다.

특수 트리거 변수를 사용한 타이머 구성의 예를 보여주는 터미널입니다.

마지막으로 Systemd Timers는 표준 cron 데몬과 비교해도 매우 정확합니다. 기본적으로 변수를 사용하여 최대 마이크로초까지 작업을 추적하고 실행할 수 있습니다 AccuracySec. 예약된 작업에 대한 정확한 타이밍이 필요한 컴퓨터를 실행하는 경우 매우 유용합니다.

Systemd 타이머 설치

타이머는 Systemd의 내장 기능입니다. 즉, Arch, Fedora, Ubuntu와 같은 인기 있는 Linux 배포판에서처럼 init 데몬으로 Systemd를 사용하는 경우, 귀하의 머신은 이미 일부 시스템 프로세스에서 이 기능을 활용하고 있습니다.

배포판에서 Systemd가 실행되고 있는지 확인하려면 다음 명령을 실행하세요.

이렇게 하면 현재 시스템에서 실행 중인 모든 Systemd 단위, 장치 및 타이머가 나열됩니다.

Systemd 기반 Linux 배포판에서 systemctl 명령의 출력을 보여주는 터미널입니다.

기존 타이머 나열

현재 사용자 계정에서 타이머가 실행 중인지 확인하는 가장 쉬운 방법은 다음 명령을 사용하는 것입니다.

또한 --all플래그를 사용하여 비활성 타이머를 포함하여 시스템의 모든 타이머를 확인할 수 있습니다.

이렇게 하면 각 타이머가 작동하는 날짜와 시간, 해당 지점까지의 카운트다운, 마지막으로 실행된 이후로 경과한 시간, 타이머 자체의 장치 이름, 각 타이머 장치가 활성화하는 서비스가 인쇄됩니다.

현재 세션에서 실행 중인 모든 Systemd 타이머를 나열하는 터미널입니다.

새로운 서비스 및 타이머 생성

Systemd 타이머를 만드는 첫 번째 단계는 타이머를 연결할 서비스를 만들거나 기존 서비스를 찾는 것입니다. 모든 타이머는 부모 서비스 단위에 연결해야 하기 때문입니다. 이 섹션에서는 사용자 지정 Systemd 서비스에 대한 타이머를 만드는 과정을 안내합니다.

홈 디렉토리에 빈 “.service” 및 “.timer” 파일을 만들어 시작합니다.

좋아하는 텍스트 편집기를 사용하여 새 서비스 파일을 엽니다.

새 서비스 파일에 다음 템플릿을 붙여넣으세요.

“.service” 파일을 저장한 다음 같은 텍스트 편집기를 사용하여 빈 “.timer” 파일을 엽니다.

다음 코드 블록을 타이머 파일에 붙여넣습니다.

섹션 으로 이동 [Timer]한 다음 변수 값을 OnCalendarSystemd 단위를 실행하려는 날짜와 시간으로 바꾸세요. 제 경우에는 매일 오전 11시 43분에 정확히 프로그램이 실행되기를 원합니다.

OnCalendar 변수에 대한 사용자 정의 타이머 값을 강조 표시하는 터미널입니다.

모노토닉 타이머 만들기

특정 날짜에 실행되는 타이머를 설정하는 것 외에도 컴퓨터의 현재 가동 시간에 상대적으로 실행되는 단조 타이머를 만드는 것도 가능합니다. 이는 데스크톱이나 노트북과 같이 지속적으로 실행되지 않는 머신에서 작업을 예약하는 경우에 유용합니다.

시작하려면 “.timer” 파일을 열고 해당 섹션으로 스크롤하세요 [Timer].

위치를 강조하는 터미널

OnCalendarPersistent변수를 모두 제거한 다음 , OnBootSec단위 파일을 실행하려는 시간 간격을 추가합니다. 예를 들어, “1hr”로 설정하면 Systemd가 컴퓨터가 성공적으로 부팅된 후 1시간 후에 명령을 시작합니다.

사용자 정의 타이머 파일의 원래 타이밍 변수를 대체하는 OnBootSec 변수를 강조 표시한 터미널입니다.

OnUnitActiveSec바로 아래에 변수 를 추가한 다음 OnBootSec, 시스템이 부팅된 후 타이머가 계속 실행되기를 원하는 간격을 제공합니다. 제 경우에는 처음 실행한 후 30분마다 작업을 실행하고 싶기 때문에 “30분”으로 설정합니다.

단일 실행 타이머를 단조 타이머로 변환하는 OnUnitActiveSec 변수를 강조한 터미널입니다.

과도 타이머 생성

Systemd Timer가 Systemd에 깊이 통합되는 이점 중 하나는 init 데몬의 다른 인접 프로그램을 활용할 수 있다는 것입니다. 예를 들어, Systemd-run과 함께 타이머를 사용하여 머신에서 일회성 일시적 작업을 생성할 수 있습니다.

간단한 임시 타이머를 만들려면 다음 코드 줄을 터미널 세션에 붙여넣은 다음, 변수 값을 --on-calendar명령을 실행할 간격으로 바꾸세요.

실행하려는 명령을 줄의 끝에 추가한 후, 눌러서 Enter예약하세요.

--on-boot또한 및 변수를 모두 사용하여 임시 단조 타이머를 생성할 수도 있습니다 --on-unit-active.

다음 명령을 실행하여 임시 타이머가 Systemd의 작업 스케줄러에 대기열에 추가되었는지 확인하세요.

시스템에 로드된 과도 타이머의 상태를 보여주는 터미널입니다.

Systemd 타이머 실행

새로운 Systemd Timer를 실행하려면 현재 Systemd 세션에 제대로 로드되었는지 확인해야 합니다. 그러려면 사용자 지정 서비스와 타이머 파일을 모두 Systemd의 서비스 디렉터리에 복사합니다.

init 데몬의 현재 구성을 다시 로드합니다.

다음을 사용하여 생성한 서비스와 타이머를 모두 활성화합니다 systemctl.

새 터미널 세션에서 다음을 실행하여 새 타이머를 제대로 로드했는지 확인하세요 sudo systemctl status my-new-timer.timer. 이 경우, 내 타이머가 이제 예약되어 시스템이 실행될 준비가 되었음을 알 수 있습니다.

현재 시스템에서 실행 중인 타이머 파일을 보여주는 터미널.

Systemd Timers를 사용하여 작업을 예약하는 방법을 배우는 것은 Linux 머신이 후드 아래에서 어떻게 작동하는지 이해하는 데 있어 일부에 불과합니다. Grub과 Systemd-boot에 대한 비교 기사를 살펴보면서 이 멋진 OS의 내부를 더 자세히 알아보세요.

이미지 출처: Alexandr Podvalny via Unsplash . 모든 변경 사항과 스크린샷은 Ramces Red가 제공했습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다