Wie kann ich mit cron automatisch ein Commit in mein Git-Repository durchführen?


3

Ich sehe mir viele Antworten an zu diesem Thema , aber hier stimmt etwas nicht, lassen Sie mich erklären. Ich erstelle dieses Skript, um meine cron sauberer :)

#!/bin/bash

cd /home/valter.silva/Development/git/valter/ 
/usr/bin/git add -A 
/usr/bin/git commit -am "update `date`"
/usr/bin/git push

Dann füge es bei meinem cron hinzu, valter.silva's cron, nicht meine root cron:

00 * * * * /home/valter.silva/Development/git/valter/scripts/git/sync.sh

Starten Sie meinen Cron neu

sudo service cron restart
cron stop/waiting
cron start/running, process 6047

Und .. nichts passiert ..

Aber wenn ich mein Skript in der Befehlszeile ausführe, funktioniert alles einwandfrei. Ich weiß mit Sicherheit, dass manchmal, wenn Sie nicht den gesamten Pfad in Cron-Skripten angeben, dies nicht richtig funktioniert. Und das sollte ich mit meinem Cron machen, nicht mit Roots Cron.

Also, was ist hier los? Irgendwelche Ideen ? Vielen Dank!

aktualisieren

Ich folge dem Vorschlag von Terdon, um die Operation zu protokollieren, aber es scheint, dass alles in Ordnung ist, aber nicht die push aber verarbeiten. Warum ?

[master ad5d001] update Fri Aug  9 11:00:01 BRT 2013
 9 files changed, 1224 insertions(+), 364 deletions(-)
 create mode 100644 scripts/centreon/4.answers~
 create mode 100644 scripts/centreon/6.importing database
 create mode 100644 scripts/centreon/6.importing database~
 create mode 100755 scripts/centreon/7.upgrade.sh
 create mode 100755 scripts/centreon/7.upgrade.sh~
 create mode 100644 scripts/centreon/8.answers
 create mode 100644 scripts/centreon/8.answers~
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)

Wie haben Sie dies zur crontab Ihres Benutzers hinzugefügt (sollten Sie verwenden)? crontab -e )? Was macht crontab -l Bericht? Sie können versuchen, hinzuzufügen SHELL=/bin/bash und MAILTO="valter.silva" in die Crontab Ihres Benutzers. Insbesondere letzteres kann zu Fehlermeldungen in Ihrer lokalen Mail führen ( /var/spool/mail/valter.silva ), wenn das lokale Mailsystem funktioniert. Und meiner Meinung nach gibt es keine Notwendigkeit, den neu zu starten cron Bedienung.
mpy

crontab -enicht sudo crontab -e. Das crontab -l ist genau dieser eintrag den ich poste, da ist nur dieser eintrag in meinem cron.
Valter Silva

1
Ist der Remote-Git-Server zufällig durch einen SSH-Schlüssel mit einem Kennwort geschützt?
user2313067

Hast du es jemals herausgefunden? Kam hier durch googeln. Ich frage mich, ob du es jemals repariert hast.
Lincoln Bergeson

Antworten:


1

Ich bin kein Git-Meister, aber ich mache einige Git-Tests auf meinem lokalen Git-Test-Repo. Wenn ich Git Push laufen lasse, dann ist die Ausgabe:

fatal: No configured push destination.
Either specify the URL from the command-line or configure a remote repository using

git remote add <name> <url>

and then push using the remote name

git push <name>

F: Haben Sie das Remote-Repository mit konfiguriert? git remote add Befehl? Wenn ja, versuchen Sie, git push mit dem Namen des Remote-Repositorys auszuführen. Wenn nein, konfigurieren Sie einen oder verwenden Sie git push mit der Remote-Repository-URL in der Befehlszeile ( git push git://host.xz[:port]/path/to/repo.git/ ).


Ich habe mit konfiguriert git remote add, Ich werde es mir ansehen.
Valter Silva

1

Zusammenfassend habe ich die Links vereinfacht, damit sie besser lesbar sind, wenn jemand nach einer Antwort auf der Grundlage von sucht Huti's Blog Post .

Also für deine sync.sh Ich würde hinzufügen -u origin master für den push:

#!/bin/bash

cd /home/valter/git-project/
/usr/bin/git add -A 
/usr/bin/git commit -am "Daily update"
/usr/bin/git push -u origin master

Stellen Sie sicher, dass Ihr Skript von bash ausgeführt werden kann:

sudo chmod 765 ~/sync.sh

Dann können Sie dem Text eine Zeile hinzufügen /etc/crontab:

sudo nano /etc/crontab # To edit the file
01 18  *  *  * root  /home/valter/sync.sh

Starten Sie den Computer neu, damit der Cron-Job wirksam wird. Jetzt wird Ihr Skript jeden Tag um 18:01 Uhr ausgeführt. Wenn es keine Änderung gibt, wird nichts gepusht.


0

Warum sollten Sie damit rechnen, dass etwas passiert? Sie haben gesagt cron Stündliche Ausführung Ihres Skripts zur vollen Stunde. Wenn Sie Ihre Crontab um 13:02 Uhr geändert haben, wird bis 14:00 Uhr nichts passieren.

Warten Sie eine Weile, bis die Zeit abgelaufen ist XX:00sollte Ihr Skript ausgeführt werden. Oh, und es besteht keine Notwendigkeit, neu zu starten cronwird die neue crontab gelesen und beim nächsten Start ausgeführt.

Wenn Sie lange genug gewartet haben und Ihr Skript noch nicht ausgeführt wird, versuchen Sie, die Fehlerausgabe umzuleiten, um zu überprüfen, ob etwas passiert:

00 * * * * /home/valter.silva/Development/git/valter/scripts/git/sync.sh 2> /home/valter.silva/error.txt

Versuchen Sie auch, einen Dummy-Cron-Job einzurichten, um festzustellen, ob dies funktioniert:

00 * * * * date > /home/valter.silva/date.txt

Ich versuche das jetzt über eine Woche zu machen und herauszufinden, was passiert, um meine Änderungen nicht zu bestätigen.
Valter Silva

@ WalterHenrique siehe aktualisierte Antwort für ein paar Vorschläge.
terdon

Ok, terdon, wird das machen. Ich klone mein Repo jetzt auf einem anderen Computer :)
Valter Silva

Ich aktualisiere meinen Beitrag. Könnten Sie bitte einen Blick darauf werfen?
Valter Silva
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.