Ik zocht een commando waarmee ik met één regel de opdracht kon geven om een bestand met FTP naar een webserver te uploaden. Ik kwam ftp-upload tegen. Een handig tool die prima op de Raspberry Pi werkt. Dit commando kan ik dan in de crontab zetten en herhalend starten.
Installeer ftp-upload met:
sudo apt-get install ftp-upload
De handleiding kan je lezen met het commando: man ftp-upload
Voorbeeld om te uploaden:
De syntax van het commado ziet er als volgt uit:
ftp-upload -h {HOST} -u {USERNAME} –password {PASSWORD} -d {SERVER_DIRECTORY} {FILE_TO_UPLOAD}
Bovenstaande regel vertaald naar gepersonaliseerde instellingen die je van je provider ontvangen hebt:ftp-upload -h ftp.server.mijndomein.nl --password ABC123 -d /mapopserver/ naambestand.ext
Deze regel zou achter de prompt moeten werken. Het heeft geen zin om verder te gaan als dit niet werkt. Je hebt straks de werkende syntax nodig.
Shell script maken
We gaan een shell script maken. Een shell script is een script dat wordt geschreven voor de shell ofwel de interpreter van de commandoregel. Het wordt vaak beschouwd als een relatief eenvoudige programmeertaal die toegespitst is op systeembeheer. Geef in:
nano upload_file.sh
Geef de volgende (voorbeeld) tekst in en sla het bestand op.
ftp-upload -h server145.hosting2go.nl -u pjansen --password c123ABC -d /httpdocs/ logboek.txt
In dit voorbeeld is mijn ftp server is server145.hosting2go.nl, userid is pjansen, wachtwoord is c123ABC en het serverpad is /httpdocs/ en het bestand heet logboek.txt. Vertaal deze (blauwe) tekst naar jouw gegevens die je hierboven getest hebt.
Testen .sh script
Je kunt het shell script testen door achter de prompt het volgende commando te geven.sh upload_file.sh
of./upload_file.sh
Controleer op de server of het bestand er staat. Zo ja, ga dan verder. Zo niet, onderzoek wat het probleem is.
Crontab
We gebruiken cron om het commando op gezette tijden naar de server te verplaatsen.
Start crontab op met: crontab –e
We willen dat iedere 15 minuten shell-script (.sh) wordt gestart. Kies een van de twee onderstaande cron commando’s en sla de crontab op.*/15 * * * * /home/pi/ Ftp/upload_file.sh
of beter:
*/15 * * * * /home/pi/Ftp/upload_file.sh > /tmp/ftp.out 2>&1
CHMOD – permissies
Alle bestanden dienen de juiste permissies te hebben.
Geef ze daarom allemaal chmod 750 bestandsnaam.ext
als je wilt dat iedereen alles ermee mag, doe je chmod 777
Melding? Heb je mail (/var/mail/pi)?
Als crontab zelf het shell-script start dan volgt er een melding, zie hieronder. Mocht er iets niet goed gaan, ontvangt de user (pi) een mailmelding:
‘You have new mail in /var/mail/pi’
Voorbeeld mail:
Open het mailbestand met: nano /var/mail/pi
From xx@xxxxxxx Wed Mar 22 21:35:01 2017
Return-path:
Envelope-to: xx@xxxxxxx
Delivery-date: Wed, 22 Mar 2017 21:35:01 +0100
Received: from xx by raspberrypi with local (Exim 4.84_2)
(envelope-from )
id 1nymrD-0002nN-Wo
for xx@xxxxxxx; Wed, 22 Mar 2017 21:35:01 +0100
From: root@raspberrypi (Cron Daemon)
To: xx@xxxxxxx
Subject: Cron /home/pi/my_python/Ftp/upload_file.sh
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
Message-Id:
Date: Wed, 22 Mar 2017 21:35:01 +0100
Cannot open Local file logboek.txt: No such file or directory
at /usr/bin/ftp-upload line 284.
ftp-upload: error storing logboek.txt (250 CWD command successful)
Oplossing voor bovenstaande melding:
Het pad van het bestand moet vanaf de root (/home/pi/) worden aangevuld. Ook het pad van ontvangende map van de server (/httpdocs/) wordt vermeld, tezamen met het pad (/Ftp/logboek.txt) waar het bestand geplaatst moet worden. De opdrachtregel is dan als volgt:
ftp-upload -h server145.hosting2go.nl -u pjansen --password c123ABC -d /httpdocs/ /home/pi/ Ftp/logboek.txt
Je kunt de regel achter de prompt testen.
Have A Nice Day!
Laat een reactie achter