
私のプロジェクトデータベースをバックアップできるサービスユニットは次のとおりです。
[Unit]
Description=%i mysql backup for `apples` database
After=mysqld.service
Requires=mysqld.service
[Service]
User=root
EnvironmentFile=/home/site/backend/config/prod/env
ExecStart=bash -c "mysqldump apples | gzip > /home/site/backups/apples.%I.sql.gz && cp /home/site/backups/apples.%I.sql.gz /mnt/cloud/backup/db/apples/%I/apples_$(date +%%Y-%%m-%%d_%%H-%%M-%%S).sql.gz && touch /mnt/cloud/backup/db/apples/%I"
Restart=on-failure
StartLimitInterval=60
StartLimitBurst=3
Type=simple
[Install]
WantedBy=multi-user.target
%I
タイマーを介して毎時間、毎日、毎週、毎月(サービス内)バックアップを実行するために使用されます。
コマンドを手動で実行すると、ExecStart
(%%
sと%I
s、%
およびたとえば置換monthly
)、作成されたバックアップを含むディレクトリのmtimeが期待どおりに更新されます。
一度にタイマーのいずれかを実行しても同じことが起こります。うまくいきます。systemctl start [email protected]
しかし、
特定の時間に呼び出されるようにスケジュールされた実際のsystemdタイマーがそのディレクトリにバックアップファイルを作成すると、そのディレクトリの{hourly,daily,weekly,monthly}
mtimeは更新されません。 mtimeが更新されたことを確認するために呼び出しを追加しましたが、touch
何らかの理由で更新されていないことがわかります。このディレクトリには、スケジュールされたタイマー呼び出しによって生成されたバックアップファイルの正しいmtimeを持つ複数の毎日のバックアップがありますが、それを含むディレクトリには古いmtimeがあります。
私のタイマーは次のとおりです
[Unit]
Description=%I mysql backup for database `apples`
Requires=mysqld.service
After=mysqld.service
[Timer]
OnCalendar=*-*-* 04:00:00
[Install]
WantedBy=timers.target
/mnt/cloud
重要な場合は、WebDAVを介してインストールしてください。
自動バックアップ監視を設定するには、これらのmtimeを更新する必要があります。
何が問題なのでしょうか?
答え1
理由はわかりませんが、コマンド全体ExecStart
をスクリプトファイルに移動することで問題が解決しました。
ExecStart=/home/site/scripts/backup.sh %I