시스템 부팅 후 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>