FTP upload naar webserver

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!