私の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
(または20秒)は、サービスが停止してから10秒後にサービスを開始します。これにより、2回呼び出されることなく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