systemd를 사용하여 30분마다 스크립트 실행

systemd를 사용하여 30분마다 스크립트 실행

시스템 부팅 후 30분마다 스크립트를 실행하고 싶습니다. cron을 사용할 수 있다는 것을 알고 있지만 이 기능을 자주 사용할 계획은 없으므로 systemd에서 사용해 보고 싶었습니다.

지금까지 나는 어떤 일을 한 번만 수행할 수 있는 단조로운 타이머만을 찾았습니다(적어도 내 생각에는 그렇습니다). 부팅/시스템 시작 이후 30분마다 무언가를 수행하고 싶다면 및 는 어떻게 생겼습니까 foo.timer?[email protected]

[이메일 보호됨]

[Unit]
Description=run foo
Wants=foo.timer

[Service]
User=%I
Type=simple
ExecStart=/bin/bash /home/user/script.sh

foo.timer

[Unit]
Description=run foo

[Timer]
where I am stuck... ???

답변1

두 개의 파일을 생성해야 합니다. 하나는 서비스용이고 다른 하나는 동일한 이름의 타이머용입니다.

예:

/etc/systemd/system/test.service

[Unit]
Description=test job

[Service]
Type=oneshot
ExecStart=/bin/bash /tmp/1.sh

/etc/systemd/system/test.timer

[Unit]
Description=test

[Timer]
OnUnitActiveSec=10s
OnBootSec=10s

[Install]
WantedBy=timers.target

그런 다음 명령을 사용하여 systemd를 다시 로드 systemctl daemon-reload하고 타이머를 시작 systemctl start test.timer하거나 기본적으로 활성화합니다( systemctl enable test.timer).

테스트 내용은1.sh

#!/bin/bash
echo `date` >> /tmp/2

그리고 이 명령은 사용 가능한 모든 타이머를 확인합니다. systemctl list-timers --all

프로젝트에 대한 자세한 내용페이지그리고 에 대한 예아치리눅스 페이지

답변2

타이머를 사용하지 않는 대안은 다음과 같습니다. 시간이 그다지 중요하지 않고 스크립트 실행에 오랜 시간이 걸리지 않는 간단한 작업에는 적합합니다.

[Unit]
Description=Run foo

[Service]
User=%I
Restart=always
RestartSec=1800s
ExecStart=/bin/bash /home/user/script.sh

답변3

올바른 접근 방식은 systemd-run직접 정의할 필요 없이 작업 일정을 계획할 수 있는 단위를 사용하는 것입니다.

달력이나 기간별로 예약할 수 있습니다. MYSELF가 애플리케이션의 전체 경로라고 가정합니다.

systemd-run --user --on-calendar '*:0/1' ${MYSELF} <args>

관련 정보