티스토리 뷰

Linux/Command & Tool

[Systemd] Timer

Developer's Delight Linuxias 2018.03.13 11:19

systemd.timer는 systemd에 포함되어 있는 job scheduler입니다. 


여러분들이 가장 잘 알고 있을 job scheduler는 cron입니다. cron은 전통적으로 *nix 시스템에서 가장 많이 사용된 job scheduler이죠. systemd.timer는 cron을 완벽하게 대체하는 새로운 job scheduler입니다! 


그럼 systemd timer는 cron과 다르게 어떠한 장점들이 있는 걸까요? 아래 간단하게 정리해보았습니다.


  • Job을은 Timer와 독립적으로 시작할 수 있습니다. 이렇게 하면 디버깅이 간단해집니다.

  • Job을 특정 환경(user, boot, H/W state 변화 등등의 이벤트)에서 실행되도록 설정할 수 있습니다. 

  • cgroup에 attach할 수 있습니다. 즉 Job은 다른 시스템 units에 dependency를 가지도록 설정가능합니다.

  • 쉬운 debugging을 위해 systemd journal에 로그를 기록합니다.


Timer는 Monotinic timer와 Realtime timer로 구분할 수 있습니다. 


1. Monotonic timer

 - job이 시작시간을 기준으로 설정한 시간 간격으로 실행됩니다. 예를들어 시작을 booting 후 10분 후 라고 하고, 간격을 3시간으로 설정하면, Booting 후 10분 후에 job이 최초 실행되고, 그 이후 3시간 간격으로 실행됩니다.


2. Realtime timer

 - cronjobs와 동일하게 Calendar event로 job이 실행됩니다. 년/월/일/요일/시/분의 단위로 설정이 가능합니다.

 

전체 Timer list를 확인하는 명령어는 아래와 같습니다.

 $systemctl list-timers



timer를 등록하기 위해서는 .timer와 .service 파일을 작성하고 /etc/systemd/system/ 디렉토리 아래 위치시키면 됩니다.

그럼 .timer와 동일의 이름을 가진 .service 파일을 실행하게 되죠. 아래 각각 Monotonic와 Realtime timer의 예시입니다.


Monotonic timer

Realtime timer 


 


Monotonic timer의 예시는 부팅 후 10분 뒤 최초 실행하고, 그 이후는 1주일에 한번씩 실행되게 합니다. 만약 OnUnitActiveSec=1w가 1h였다면 1시간 간격으로 실행되 될 것입니다. Realtime timer는 active된 시점에 실행되고 그 이후 1주일 간격으로 실행됩니다.


그럼 아래 exam.timer가 있으면 동일한 이름의 service 파일이 있어야 한다고 했습니다. 위 timer 파일의 이름이 exam이니 exam.service 파일이 있어야 겠죠. 아래에서 ExecStart에 작성한 부분이 여러분이 실행하고자 하는 스크립트 등의 경로를 작성하는 곳입니다!



이렇게 만든 파일을 /etc/systemd/system/ 아래 위치 시키고 enable 시키시면 됩니다.



어렵지 않으니, 따라하시면 쉽게! 하실 수 있을 겁니다. 날짜 설정등에 필요한 내용이나 더욱 상세한 내용은 아래와 같이 Manual을 이용하시면 됩니다!

$man systemd.timer


지금까지 부족한 글 읽어주셔서 감사합니다.



댓글
댓글쓰기 폼