sysutils/freebsd-snapshot で導入される FreeBSD Snapshot Management Environment https://people.freebsd.org/~rse/snapshot/ では、毎時、毎日、毎週にスナップショットを取得するためのcrontabを書くんですが、これが見事にぜんぶ0分に回るんですよね…
# Perform hourly/daily/weekly maintenance (FreeBSD UFS/ZFS snapshots only). 0 * * * * root periodic-snapshot hourly 0 0 * * * root periodic-snapshot daily 0 0 * * 0 root periodic-snapshot weekly
こんな具合で。で、daily.0 と weekly.0 のスナップショットが同時に取得されようとして、片方が失敗するということが稀に起きます。
Oct 1 00:00:01 filesv root: snapshot: making snapshot on /svr/home failed Oct 1 00:00:04 filesv root: snapshot: daily.0 snapshot on filesystem /svr/home made (duration: 0 min)
ごらんのありさま。periodic-snapshot の中でロックファイルを作っているので、片方がコケるだけで済むのですが、どうもなあ…と思いまして、若干ずらしてみました。
# Perform hourly/daily/weekly maintenance (FreeBSD UFS/ZFS snapshots only). 0 * * * * root periodic-snapshot hourly 5 0 * * * root periodic-snapshot daily 10 0 * * 0 root periodic-snapshot weekly
zfsでのsnapshot取りなら5分もいらないと思いますが、まあこれくらいでしょうか。
あと、snapshot作るのに失敗したとき、periodic-snapshot がエラーを記録してくれるんですけど、どのスナップショットを失敗したのかは表示してくれないのですね。
% diff -u periodic-snapshot.orig periodic-snapshot --- periodic-snapshot.orig 2017-10-04 03:41:54.000000000 +0900 +++ periodic-snapshot 2017-10-04 03:42:35.000000000 +0900 @@ -121,7 +121,7 @@ snapshot make -g$when $fs:$time_tag.0 if [ $? -ne 0 ]; then logger -p daemon.error \ - "snapshot: making snapshot on $fs failed" + "snapshot: making snapshot on $fs:$time_tag.0 failed" exit 1 fi time_end=`date '+%s'`
こんな改造とかは許されるだろうか?