저(著)

systemd timer

쪼랩전사 2021. 11. 7. 15:04
728x90

필자는 리눅스에서 반복 작업을 하기 위해서 주로 cron을 사용해 왔다.
하지만, 필자가 사용하는 리눅스에서는 cron이 기본으로 설치되어 있지 않아 패키지 매니저를 이용해 설치했어야 했다.
이 일련의 과정이 귀찮아 다른 방법들을 찾아보던 중 systemd에 timer가 내장되어 있다는 것을 알게 되었다.
대부분의 리눅스 운영체제에서 systemd를 채용하고 있으므로, 이것이 좋겠다고 판단하였다.
이 포스팅에서는 systemd timer의 자세한 내용이 아니라, 간단한 사용 방법 정도만 정리하겠다.

timer 구분

원래는 아래에서 소개하는 것 외에도 다른 방법들이 있지만, 여기에서는 아래의 두 가지만 설명하겠다.

  • Timer(기본 타이머)
  • Transient Timer(일시적인 타이머)

Timer 사용법

먼저 두 가지 준비물을 준비해야 한다.

Service 파일과 Timer 파일이다. 두 개의 파일은 이름이 같아야 한다.

  • Service 파일(touch.service)
[Service]
ExecStart=touch ${HOME}/tt
  • Timer 파일(touch.timer)
[Unit]
Description=just touch

[Timer]
OnCalendar=*-*-* 0:0:0
Persistent=true

[Install]
WantedBy=timers.target

> Persistent 옵션은 컴퓨터가 종료되었던 시간 동안, 타이머를 실행했어야 했다면 타이머를 바로 실행시키는 옵션이다.

> onCalendar 옵션은 어느 시점에 Service 파일을 실행시킬지를 지정하는 옵션이다.

timer 적절한 위치로 보내기

systemctl link --user ${PWD}/touch.{timer,service}

> ${HOME}/.config/systemd/user/ 에 심볼릭 링크가 생성된다.

> --user 옵션은 현재 사용자로 systemctl을 동작시키는 옵션이다. systemctl은 기본적으로 root권한을 요구하므로, user 옵션을 사용해 좀 더 안전하게 타이머를 사용할 수 있다.

timer 실행

systemctl enable --user --now touch.timer

> enable은 컴퓨터 재부팅 후에 timer를 실행시키는 커맨드이다.

> --now 옵션은 재부팅 없이 바로 실행시키는 옵션이다.

> --user 옵션은 현재 사용자로 systemctl을 동작시키는 옵션이다. systemctl은 기본적으로 root권한을 요구하므로, user 옵션을 사용해 좀 더 안전하게 타이머를 사용할 수 있다.

timer 상태 확인

systemctl list-timers --user

> 결과에 해당 타이머가 존재하면 성공한 것이다.

> --user 옵션은 현재 사용자로 systemctl을 동작시키는 옵션이다. systemctl은 기본적으로 root권한을 요구하므로, user 옵션을 사용해 좀 더 안전하게 타이머를 사용할 수 있다.

Transient Timer 사용법

systemd-run 명령어를 통해 실행된다.
단, 컴퓨터를 재부팅 하는 경우 타이머 정보가 사라지므로 주의가 필요하다.

systemd-run --user --on-active=3 touch ${HOME}/ttttt

> --on-active 옵션은 몇 초 후에 커맨드를 실행시킬지를 지정하는 옵션이다. 이 옵션 대신 --on-calendar 옵션을 사용할 수도 있다.

> --user 옵션은 현재 사용자로 systemd-run을 동작시키는 옵션이다. systemd-run은 기본적으로 root권한을 요구하므로, user 옵션을 사용해 좀 더 안전하게 타이머를 사용할 수 있다.

  • onCalendar 유효성 검사

calendar의 포맷은 굉장히 다양하다. 기본은 아래와 같다.

DayOfWeek Year-Month-Day Hour:Minute:Second

예시: Mon,Tue *-*-01..04 12:00:00

번외로 daily, weekly, monthly도 있다.

해당 포맷이 제대로 되었는지 확인하기 위해 아래의 커맨드를 사용할 수 있다.

systemd-analyze calendar "daily"
  • ExecStart 유효성 검사

커맨드 자체가 제대로 동작하는지 확인하는 방법이다.

systemd-run --user -P cat /var/log/wtmp

> -P 옵션은 커맨드의 실행 결과를 바로 보여주기 위해 사용한다.

> --user 옵션은 현재 사용자로 systemd-run을 동작시키는 옵션이다. systemd-run은 기본적으로 root권한을 요구하므로, user 옵션을 사용해 좀 더 안전하게 타이머를 사용할 수 있다.

마치며...

systemd의 timer는 기본적으로 cron보다 사용 방법이 어렵다. 하지만 타이머가 정상 동작하는지 확인하기 쉽고 systemd가 대부분의 리눅스에서 채용되기 때문에, 사용할 가치는 충분하다고 본다.

'저(著)' 카테고리의 다른 글

nextcloud - 비밀번호 초기화  (0) 2022.03.01
git - 불필요한 로컬 브랜치 제거  (0) 2022.02.08
alias  (0) 2021.12.06
Archlinux mirrorlist ranking  (0) 2021.11.29