메뉴 닫기

Systemd.timer

Systemd(System Daemon)

RHEL 7(CentOS7) 부터 추가되었으며 병럴 처리가 가능하도록 작성된 시스템 및 서비스를 관리하는 역할을 수행합니다.

병렬로 처리하기에 부팅시 이전보다 빠르게 부팅이 이루어집니다. Systemd는 init(SystemVInit) 이라는 데몬을 대체 및 기능이 추가되어 나온 데몬이며 PID 는 init과 동일하게 1이며 부모프로세스가 없어 PPID또한 1 입니다.

Systemd.timer 은 cron과 유사하지만 cron보다 가독성이 좋고 직관적이며 부가적인 옵션을 설정할 수 있다는 장점이 있습니다.

또한 cron과 달리 서비스화를 통해 linux가 동작하는동안 cron이 중지되는것을 방지할 수 있습니다.

Systemd.timer를 이용하기 위해서는 사용할 .service 파일과 .timer 타이머가 필요하며 timer로 작동시키려는 service파일명은 같아야 합니다.

 

1. 명령어 실행 시간을 기록하는 date명령어를 실행하는 test 스크립트 생성

# vi /root/test.sh

#!/bin/bash echo “Systemd timer test $(date)” >> /root/test.log

 

2. 명령이나 스크립트를 실행하는 서비스 생성

# vi /etc/systemd/system/test.service

[Unit]

Description=test service

[Service]

Type=simple

WorkingDirectory=/root

ExecStart=/root/test.sh

[Install]

WantedBy=multiuser.target

 

** 옵션별 간략한 설명

[Unit] 섹션

Description : 파일에 대한 주석 (systemctl status 서비스명.service 조회시 같이 출력)

[Service] 섹션

Type : default값은 smimple 이며 ExecStart에 명시된 프로세스 작동시킵니다., 명시된 프로세스가 정상적으로 구동되지 않았어도 완료되었다고 판단합니다.

WorkingDirectory : 프로세스의 작업 디렉터리이며 등록된 서비스를 해당 디렉터리에서 실행합니다.

ExecStart : 실행할 스크립트나 명령, 바이너리가 위치한 절대경로를 지정합니다.

[Install] 섹션

WantedBy : Unit이 어떻게 활성화 될것인지에 대해 선언하는 부분이며 Unit을 enable시킬때 필요한 유닛을 지정합니다.

 

3. 서비스 타이머 생성

# vi /etc/systemd/system/test.timer

[Unit]

Description=test timer

[Timer]

OnBootSec=1min

OnCalendar=*** *:*:0/5

Unit=test.service

[Install]

WantedBy=multiuser.target

 

** 옵션별 간략한 설명

[Timer] 섹션

OnBootSec : 시작점을 기점으로 타이머 정의가 가능하며 Cron에서는 존재하지 않던 기능입니다. 3min을 설정시 부팅 후 1분뒤 타이머가 동작합니다. 위와 같은 타이머 형식을 Monotonic 라고 부릅니다.

OnCalendar : [“요일”] “년”“월”“일”“시”:“분”:“초” [timezone] 형식으로 작성합니다. 불필요한 부분은 제외해도 작동합니다. 사전에 정의된 날짜형식인 minutely, hourly, daily, monthly, weekly, yearly quarterly, semiannually 등의 형식을 사용 가능합니다. *** *:*:0/5 설정시 약 5초간격으로 timer를 작동합니다.

Unit : 유닛의 경우 service 파일명과 timer 파일명이 동일 할 경우 선언해주지 않아도 작동합니다., service 파일명과 timer파일명이 일치하지 않을경우 반드시 선언해주어야 합니다.

ex) test.service / test1.timer일 경우 Unit=test.service 선언

 

4. 타이머 시작 및 작동중인 타이머 확인

# systemctl now enable test.timer

# systemctl listtimers

# systemctl listtimers test.timer

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x