2014-05-14 4 views
12

Ich versuche, ein Bash-Skript zu schreiben, das einen mysqldump auf der Datenbank meiner Live-Site durchführt, dann den Dump zu einem Git-Repository hinzufügt und festschreibt. Hier ist, was ich bisher habe (gespeichert in einer .sh-Datei, die durch einen crontab-Eintrag genannt wird):

/usr/bin/mysqldump --skip-comments --skip-dump-date -u [user] -p[pass] database | gzip > /var/www/site/backup/database.sql.gz 
cd var/www/site/backup && git add * 
cd var/www/site/backup && git commit -m 'Database $(date +%a %H:%M %h %d %Y)' 

Mein crontab-Eintrag wie folgt aussieht:

0,20,40 8-22 * * * /var/www/site/backup/script.sh 

ich, dass dieses Skript sehen kann dump die Datenbank, aber nicht hinzufügen oder die Datei zu git commit. Gibt es etwas, das mir fehlt?

bearbeiten =================================

ich folgende Änderungen vorgenommen und die commit funktioniert:

cd /var/www/site/backup && /usr/bin/git add * 
cd /var/www/site/backup && /usr/bin/git commit -m 'Database $(date +%a %H:%M %h %d %Y)' 

Allerdings wird das Datum nicht berechnet.

bearbeiten =================================

neuesten Versionen, einschließlich (die meisten) die Empfehlungen

/usr/bin/mysqldump --skip-comments --skip-dump-date -u [user] -p[pass] database > /var/www/site/backup/database.sql 
cd var/www/site/backup 
/usr/bin/git add * 
/usr/bin/git commit -m "Internal Forms Live Database Dump Stored $(date '+%a %H:%M %h %d %Y')" 
+0

hast du schon den Status deines git-repositorys mit 'git status' überprüft? – florianb

+0

Ja, so wusste ich, dass die Commits nicht passierten – Hoytman

+2

Komprimieren Sie Ihre Dump vor dem Hinzufügen macht es unmöglich für Git, nur differenzielle Daten zu speichern, git wird sich um die Komprimierung von Daten zu kümmern, wo immer es möglich ist. Entweder lassen Sie es unkomprimiert oder verwenden Sie stattdessen Git-Annex. –

Antwort

22

$(...) und other forms of substitutions are not interpolated in single-quoted strings.

Also, wenn Sie Ihr Datum berechnet wollen, tun

git commit -m "Database $(date '+%a %M:%H %h %d %Y')" 

, das heißt, die gesamte Nachricht String in doppelte Anführungszeichen $(...) zu ermöglichen, interpoliert werden, während das Argument date in einfachen Anführungszeichen ist es ein machen einzelnes Argument (übergeben an date).

+0

Ich änderte die & a zu% a – Hoytman

Verwandte Themen