mtimeディレクトリは、systemdタイマーを介してのみファイルを生成すると更新されず、同じコマンドを手動で実行すると正常に機能します。

mtimeディレクトリは、systemdタイマーを介してのみファイルを生成すると更新されず、同じコマンドを手動で実行すると正常に機能します。

私のプロジェクトデータベースをバックアップできるサービスユニットは次のとおりです。

[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と%Is、%およびたとえば置換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

おすすめ記事