2017-01-11 12 views
-1

Я пишу простой скрипт bash, где скрипт bash будет синхронизировать мои серверы с моими промежуточными серверами. Я использую rsync для этого.Создайте файл журнала для Rsync, если он не существует

Что мне нужно - это файл журнала за каждый день выполнения сценария. Я использую следующую команду

rsync -azP --stats source-directory [email protected]:destination-directory --log-file=~/public_html/rsynclogs/rsync-backup-log-`date +"%Y-%m-%d"`.log 

ошибка эта команда дает мне это

rsync: failed to open log-file ~/public_html/rsynclogs/rsync-backup-log-2017-01-11.log: No such file or directory (2) 
Ignoring "log file" setting. 

Так, скорее всего, он ищет существующий файл журнала, но я хочу, чтобы быть создан, если он не существует , Пожалуйста, совет, как я могу это достичь.

ответ

1

Хорошо, так после хорошего руководства со стороны классных людей, которые ответили ниже, я был в состоянии решить эту проблему , На самом деле проблема заключалась в том, что если вы используете --log-file с rsync и предоставьте logfile директорию, которая не существует, она даст вам сообщение об ошибке, что файл журнала не существует.

Но если предоставленный каталог существует, то файл журнала автоматически создается в предоставленном каталоге. Вот обновленный синтаксис, который я использую

mkdir -p -v $HOME/public_html/rsynclogs/ 
rsync -azP --stats source-directory [email protected]:destination-directory --log-file=$HOME/public_html/rsynclogs/rsync-backup-log-$(date +"%Y-%m-%d").log 

Теперь mkdir создает каталог. Как было предложено @janek, я добавил -p, чтобы проверить, существует ли каталог и создает ли он его, если он не существует.

Другие обновления в синтаксисе:

Заменено ~ с $HOME. Рекомендовано @ l'L'l

Заменено backticks(``)$(...). Рекомендовано @ l'L'l

2

Простой способ будет выполнять touch, чтобы создать пустой файл перед выполнением rsync:

touch `date +"%Y-%m-%d"`.log 
rsync <options> 

touch создает пустой файл, если имя файла не существует, но если файл не существует, он просто обновляет последнее измененное время.

+0

Прикосновением прикосновением также выдается сообщение об ошибке 'touch: can not touch ~/public_html/rsynclogs/rsync-backup-log-2017-01-11.log ': Нет такой файл или каталог ' Скорее всего, он также ищет каталог, который не существует по имени rsynclogs –

+0

В этом случае заранее создайте каталог rsynclogs или каждый раз в скрипте, используя mkdir -p Janek

+0

мы можем проверить, если каталог существует, не создавайте его, если он его создает? –

2

Проблема заключается в тильде (~) на вашем пути. Вы должны либо удалить = или использовать:

--log-file="$HOME/public_html/rsynclogs/rsync-backup-log-$(date +"%Y-%m-%d".log)" 

Также обратные кавычки являются наследием и должны быть заменены на $(...)

+0

заменяет $ HOME всеми ~ все равно дает мне ту же ошибку.Также я не понимал, что вы имеете в виду под задями? Im sorry im new к этому .. –

+0

Существует ли каталог, который вы пытаетесь записать файл (например, '$ HOME/public_html/rsynclogs /' aka '~/public_html/rsynclogs /', aka '/ Users/YourUser/public_html/rsynclogs/')? Сначала создайте каталог, если он не существует. Также удалите '=' из '--log-file =', поэтому это будет '--logfile ~ ~ path" '... это необходимо, если вы используете' ~ '. Backticks - это тики ('\' '), которые у вас есть в вашей дате cmd. –

+0

Нет, это не так. Но я хочу создать его, если он не существует. Является ли это возможным? –