Назад | Перейти на главную страницу

Делайте cron log rsync только если была передача

У меня этот crontab запускается каждые 5 минут:

date >> ~/18/rsync.log
rsync -vaz user@r18:~/assets ~/18 >> ~/18/rsync.log 2>&1

Он добавляет это в файл журнала каждые 5 минут:

Thu Aug 16 13:00:01 MSK 2012
receiving incremental file list

sent 506 bytes  received 541488 bytes  361329.33 bytes/sec
total size is 12954651209  speedup is 23901.84

А иногда добавляет актуальные журналы передачи:

Thu Aug 16 13:10:01 MSK 2012
receiving incremental file list
assets/response/20120816/
assets/response/20120816/1017161.doc
assets/response/20120816/1017162.doc
assets/response/20120816/1017163.doc

sent 568 bytes  received 561686 bytes  1124508.00 bytes/sec
total size is 12954864201  speedup is 23040.95

Я хотел бы опустить пустой журнал передачи и сохранить актуальные списки передач. Есть ли способ настроить rsync для создания подробного вывода только при непустых передачах?

Не используйте параметр -v команды rsync, вместо этого используйте --out-format:

rsync --out-format="%n%L" -az user@r18:~/assets ~/18 >> ~/18/rsync.log 2>&1

Вывод будет только при передаче файлов и не будет вывода, когда вы этого не сделаете. Чтобы получить более интересный вывод, посмотрите справочную страницу rsync.conf в разделе «Формат журнала».

Хорошо, я написал гениальный сценарий оболочки для фильтрации бессмысленного спама, исходящего от rsync при пустых передачах. Если вы знаете способ лучше его обнаружить, добавьте свой ответ.

#!/bin/sh

LOG=$HOME/18/sync.log
TMP=$HOME/18/temp.log
SRC=user@r18:~/assets
DST=$HOME/18

echo >> $TMP
date >> $TMP
rsync -az $SRC $DST --log-file=$TMP --log-file-format='%10l %n%L'
[ `cat $TMP | wc -l` != 4 ] && cat $TMP >> $LOG
rm $TMP

Пожалуйста, проверьте параметры rsync --log-file-format и --log-file. Формат файла журнала по умолчанию добавляет 2 строки в файл журнала, даже если ничего не передается, но, пожалуйста, проверьте руководство. Возможно, при изменении формата журнала добавятся только записи с перенесенными файлами.

Тебе лучше использовать Наблюдатель бежать rsync всякий раз, когда файл изменяется. Он основан на incron но может отслеживать каталоги рекурсивно.

$ git clonet git://github.com/splitbrain/Watcher.git
$ cd Watcher
$ cp watcher.ini ~/.watcher.ini

~/.watcher.ini

[DEFAULT]
logfile=/tmp/watcher.log
pidfile=/tmp/watcher.pid
[job1]
watch=/home/quanta/x
events=create,delete
recursive=true
autoadd=true
command=rsync -vaz quanta@localhost:~/x ~/y --log-file=/home/quanta/rsync.log

Запуск демона:

$ ./watcher start
$ ps -ef | grep [w]atcher
quanta    3695     1  0 17:01 ?        00:00:00 /usr/bin/python2.7 ./watcher.py restart

rsync.log

2012/08/16 17:01:42 [3710] receiving file list
2012/08/16 17:01:42 [3724] .d..t...... x/
2012/08/16 17:01:42 [3724] >f.st...... x/a.txt
2012/08/16 17:01:42 [3724] sent 42 bytes  received 180 bytes  444.00 bytes/sec
2012/08/16 17:01:42 [3724] total size is 45  speedup is 0.20
2012/08/16 17:01:42 [3731] receiving file list
2012/08/16 17:01:42 [3745] sent 14 bytes  received 103 bytes  234.00 bytes/sec
2012/08/16 17:01:42 [3745] total size is 45  speedup is 0.38
2012/08/16 17:01:42 [3752] receiving file list
2012/08/16 17:01:42 [3766] sent 14 bytes  received 103 bytes  234.00 bytes/sec
2012/08/16 17:01:42 [3766] total size is 45  speedup is 0.38
2012/08/16 17:01:42 [3773] receiving file list
2012/08/16 17:01:42 [3787] sent 14 bytes  received 103 bytes  234.00 bytes/sec
2012/08/16 17:01:42 [3787] total size is 45  speedup is 0.38