2016-04-06 4 views
0

Ich bin auf der Suche nach etwas wissen, warum meine Verwendung von Cron fehlschlägt, wenn Sie Rsync verwenden, um Dateien vom Remote-Server auf den lokalen Pfad zu übertragen.Wie cron und rsync zu verwenden, um Dateien von Remote-Server auf lokalen Pfad zu übertragen

Mein Ziel ist es, eine geplante Cron-Job laufen zu einer bestimmten Zeit zu haben und erfolgreich mein Transfer Skript

Aus zahlreichen Google-Suchanfragen ausführen ich zusammen den folgenden Befehl rsync:

rsync --protect-args --remove-source-files --chmod=Du=rw,Dgo=rw,Fu=rw,Fog=r -apvzrc [email protected]:/media/pi/USBSTORAGE32/ /media/Data_1/"James' Files"/ 

I gesetzt haben up the remote server, so dass er nicht nach einem Passwort fragt, indem er ssh-keygen rsa verwendet, um einen öffentlichen Schlüssel zu generieren, der in einer autorized_keys-Datei gespeichert ist. Ich logge mich mit SSH in den lokalen Rechner ein und gebe den Befehl ein, um die Dateien vom entfernten Server zum lokalen Rechner zu ziehen.

Sobald ich den rsync-Befehl oben getestet hatte, dachte ich, ich hätte es genagelt, also popped das in ein Skript, das dann cron über crontab hinzufügte. My added Zeilen wie folgt aussehen

55 * * * * sudo /home/jlivin25/bin/myscripts/sync.sh > /var/log/james/cronsync.log 2>&1 

Und mein Skript sieht wie folgt aus:

#!/usr/bin/env bash 
rsync --protect-args --remove-source-files --chmod=Du=rw,Dgo=rw,Fu=rw,Fog=r -apvzrc [email protected]:/media/pi/USBSTORAGE32/ /media/Data_1/"James' Files"/ 

Die geplante Aufgabe nicht wie erwartet läuft, cron Trys um das Skript auszuführen, aber die folgende Fehlermeldung wird protokolliert, in meine Log-Datei:

sudo: no tty present and no askpass program specified 

Und sein an dieser Stelle, dass ich bin stecken, weil durch ‚googeln‘ die obige Meldung bekomme ich viele Gründe unterscheiden, was ich getan habe, funktioniert nicht. Ich bin nicht sicher, wohin der Fehler zu verfolgen ist, ist das Problem mit meiner Verwendung von Cron, SSH oder Rsync.

Jede Hilfe wäre willkommen.

littlejeem

+0

Nähte haben Sie etwas, das Ihr Terminal benötigt. Vielleicht Ihr ssh Agent – quazardous

+0

Versuchen Sie in der/etc/cron.d oder direkt mit der Crontab -e von Ihrem Root-Benutzer zu vermeiden, zu sudo – quazardous

+0

Hey @quazardous, ich hatte nicht daran gedacht (Crontab der Wurzel) Ich werde es geben und melden Sie zurück. Danke für die schnelle Antwort. – Littlejeem

Antwort

0

So sehr wahrscheinlich cron ist ein Dämon, der durch den Benutzer cron in Ihrem System ausgeführt wird. Wenn der cron Daemon beschließt, einen Cronjob auszuführen, tut er dies als cron Benutzer. Aber sehr wahrscheinlich der cron Benutzer sudo nicht erlaubt ist in Ihrem System, so dass diese Konten für die genannten sudo Fehler (wie sudo in der Regel nach einem Passwort auf verbotene Anwendungen fragt, aber in diesem Fall gibt es kein Terminal oder Passwort-Anfrage-Programm für cron Benutzer zu erwerben).

Ein Weg, dies bestätigt hat, ist so etwas wie env | sort >/tmp/environment.log in dem Start des Skripts ausführen und für die wichtigsten Variablen überprüfen (wie USER und HOME) nach der Ausführung. Sie können die Umgebung sogar mit der vergleichen, wenn Ihr Skript manuell ausgeführt wird.

Ich glaube, ein Ansatz hier ist offensichtlich, Sudo zu konfigurieren, um cron zu erlauben, Ihr Skript als der "richtige" Benutzer auszuführen. Ein anderer Ansatz wäre, Ihr Skript dazu zu bringen, die Umgebung des "richtigen" Benutzers zu quellen (oder zu replizieren), so dass sudo nicht erforderlich wäre. Ich kann nicht sagen, welche für Ihre Ziele effektiver ist.

+0

Hallo @coolparadox danke, dass du dir die Zeit genommen hast, eine Antwort zu schreiben. Ich werde überprüfen und sehen, was ich von 'env | bekomme sort>/tmp/environment.log' morgen. Ich vermute, dass ich bei dem, was ich getan habe, einige Annahmen gemacht habe, die ein erfolgreiches Ergebnis verhindern. – Littlejeem