필자는 리눅스에서 반복 작업을 하기 위해서 주로 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 |