인터넷에 연결된 경우에만 5초마다 스크립트를 실행하는 방법

인터넷에 연결된 경우에만 5초마다 스크립트를 실행하는 방법

내 Google 드라이브를 업데이트하는 스크립트가 있습니다. 이 스크립트를 실행하기 위해 systemd 유닛을 만들고 10초마다 유닛을 실행하는 타이머를 만들었으며 두 유닛 모두 작동합니다. 그러나 인터넷 연결을 끊으면 스크립트가 실패하고 인터넷이 다시 켜져도 systemd 실행이 중지됩니다. systemd가 스크립트를 계속 실행하도록 하는 방법이 있습니까, 아니면 인터넷에 연결되어 있을 때만 systemd가 스크립트를 실행하도록 하는 방법이 있습니까?

이것은 파일입니다

/etc/systemd/system/give.service:

[Unit]
Description=Syncronize google drive folder

[Service]
User=my_name
ExecStart=/home/my_name/bin/update-grive

/etc/systemd/system/grive.timer:

[Unit]
Description=Timer for how often to syncronize google drive folder

[Timer]
OnUnitActiveSec=10s
OnBootSec=10s

[Install]
WantedBy=timers.target

/home/my_name/bin/update-give:

#!/usr/bin/env bash
cd /home/my_name/gdrive
grive

답변1

Restart=always서비스가 충돌하더라도 systemd가 서비스를 계속 시작하도록 서비스 단위에 추가되었습니다 .

참고로 OnUnitInactiveSec대신에 를 사용해야 합니다 OnUnitActiveSec.

OnUnitInactiveSec=10s(또는 20s)는 서비스가 중지된 후 10초 후에 서비스를 시작합니다. 이렇게 하면 두 번 호출되지 않고 Google DOS 금지를 피할 수 있습니다.

답변2

다음과 같이 정밀도를 초로 설정하십시오.

AccuracySec=1s

문서에 따르면:

AccuracySec= 타이머가 실행되는 정확도를 지정합니다. 기본값은 1초입니다. 원천:https://www.freedesktop.org/software/systemd/man/systemd.timer.html#Description

.timer 파일에서 이 작업을 수행하세요.

나는 오랫동안 이 문제로 어려움을 겪었습니다.

답변3

아래에 [Service]다음을 추가합니다.

Restart=always
RestartSec=10

관련 정보