Ausgabe
- Ich möchte den Download einer Datei über SFTP automatisieren
- Ich habe einen SFTP-Server und einen Verschlüsselungsmechanismus eingerichtet
- Ich habe ein einfaches Bash-Skript erstellt -Skript.sh
- Ich habe einen Eintrag in Cron für das Skript hinzugefügt
Das Drehbuch,Skript.sh:
#!/bin/bash
sftp user@server:/home/user/file.txt
exit 0
Das manuelle Ausführen des Skripts funktioniert einwandfrei (die Textdatei wird im Home-Verzeichnis gespeichert), aber das HinzufügenSkript.sh(mit den entsprechenden Berechtigungen) crontab
tut nichts.
Der Crontab-Eintrag:
* * * * * /home/user/script.sh
Zur Authentifizierung habe ich ssh-keygen
einen Satz Schlüssel (privat, öffentlich) erstellt und eine Kreuzauthentifizierung zum SFTP-Server eingerichtet.
Für die Skriptautomatisierung habe ich keychain
die passwortlose Authentifizierung verwendet.
Momentan
Derzeit habe ich ein Skript namensSkript.shliegt in den"Benutzer"Home-Verzeichnis ( /home/user/
).
Bei root
manueller Ausführung ruft das Skript die Datei vom SFTP-Server ab und platziert sie in /home/user/
.
Diese Aktion wird nicht ausgeführt, wenn der Befehl von einem cron
Job aus ausgeführt wird. In tritt cron
ein sftp
Fehler auf.
Ideen?
Arbeiten daran
- WechselnHEIMVariable on
/etc/crontab
hat das Problem nicht gelöst - Die Angabe vollständiger Pfade inSkript.shhat das Problem nicht gelöst
- FeststellungWEGVariable inSkript.shhat das Problem nicht gelöst
- Ich habe den Fehler aus dem
sftp
Befehl erkannt - es ist255
Die manuelle Ausführung des Skripts ( ./script.sh
) funktioniert jedoch weiterhin einwandfrei ...
Antwort1
Ein funktionierendes Beispiel:
Ein einfaches Skript mit dem Namen hello.sh
, das einer Textdatei das Wort „Hallo“ anhängt (verwendet vollständige Pfade für jeden Befehl):
Notiz myuser
ist der Name Ihres Benutzers
#!/bin/bash
printf 'hello' >> /home/myuser/hello.txt
Machen Sie das Skript ausführbar mitchmod +x hello.sh
Den minütlich laufenden Crontab-Eintrag können Sie Ihren Bedürfnissen entsprechend ändern:
* * * * * /home/myuser/hello.sh
Ein paar Details:
Jeder Cron-Job wird als der Benutzer ausgeführt, der ihn registriert hat. Wenn der Root-Benutzer einen Cron-Job registriert, wird dieser Job mit Root-Berechtigungen ausgeführt.
Wenn ein Nicht-Root-Benutzer einen Cron-Job registriert, wird dieser Job mit den Berechtigungen des oben genannten Benutzers ausgeführt. Wenn der Job Root-Berechtigungen erfordert, schlägt er fehl, weil er vom Nicht-Root-Benutzer initiiert wurde.
Rufen Sie Befehle und Skripte besser unter Verwendung der vollständigen Pfade auf, um sicherzugehen, dass Cron sie finden und korrekt aufrufen kann. Andernfalls schlägt das Programm möglicherweise fehl, ohne dass nützliches Feedback vorliegt.