FTP och Linux (Debian)

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
Användarvisningsbild
JimmyAndersson
Inlägg: 26548
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Tur att jag inte gav upp för jag lyckades lösa det.

Jag testade att själv göra en .netrc-fil under /root och där skrev jag manuellt in det som macrot skulle skapa. Efter en chmod så fungerade det!

Macro-funktionen fungerar så att den läser av vilken ftp-adress man skriver efter ftp-kommandot. Sedan kollar den i netrc-filen efter vad den ska göra för just den ftp-adressen.

Det känns som en ganska "stelbent" lösning eftersom man bara kan ha ett macro för varje ftp-adress, så därför efterlyser jag tips på andra ftp-klienter som är mer "script-vänliga".

Det vore bra om man i ett script kunde skriva t.ex:
ftp-kommando namn:lösen@ftp.sajt.zz copy /lokal/fil.txt /spara/hit/fil.txt close


För att se text-filen där temperaturen för tillfället sparas så kan ni klicka här.
Filen uppdateras en gång varje minut. Däremot är det en ren text-fil, så ni får trycka F5 (uppdatera-knappen) själva. :)
tgr
Inlägg: 726
Blev medlem: 10 maj 2006, 09:17:07
Ort: Mölndal

Inlägg av tgr »

Nu börjar vi komma in på sådant som jag har mycke mer koll på än elektronik. Script har jag gjort en hel del :)

Det finns ett annat ftpklientpaket för linux som heter ncftp. Mycke smidigare klient som jag själv alltid använder. Den har dessutom ett extra programs om heter ncftpput som kan göra precis det du vill.

Kod: Markera allt

NcFTPPut 3.1.8

Usages:
  ncftpput [flags] remote-host remote-dir local-files...   (mode 1)
  ncftpput -f login.cfg [flags] remote-dir local-files...  (mode 2)
  ncftpput -c remote-host remote-path-name < stdin  (mode 3)
Jag skulle föreslå att du försöker med mode 2 för då blir scriptet enklast att flytta och dona med när du byter lösenord.

Om din server alltid är på och du har bredband skulle du även kunna sätta upp en cron som gör det från serversidan om det tillåtrs. Eller bara skriva så att php tankar ner din fil från din egna server då den behvövs. Det sparar du mycke bandbredd på. För hur ofta kommer någon läsa datat i filen egentligen?

Ett annat smidigare alternativ men som kräver lite av din isp är om de stöder ssh och rsync. Då kan du får en mycke smidiagere lösning där du kan lämna säkerheten helt utanför scriptet. Fråga på om du är intresserad av en sådan lösning.

I övrigt går det såklart att skriva något i t.ex. perl men då krävs det lite med kunskap för att få samma enkla fuktion.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> > Har det inte med redirect av sysin att göra ?
>
> Det låter bekant. Sedan gäller det att komma på hur man gör.

För ett nomalt EXE är det väl ">" eller "<".

> jag har tänkt använda inloggningen i ett script

Jo, men det var inte frågan, utan poängen är *hur* scriptet körs.
Om det är interaktivt (av "någon" vid en terminal) eller i batch (eller vad
det nu kallas när man kör ett script utan terminal i Unix...).

> *Alla tester har jag gjort i ett script.*

Jo, jag förstår det, men det är inte poängen.

Frågar är *hur* scriptet körs. Så länge som du själv sitter vid en prompt
och startar scriptet, så kommer sannolikt FTP att fråga om user/pw via
terminalen, eftersom sysin (och sysout) fortfarande är just terminalen...
Användarvisningsbild
JimmyAndersson
Inlägg: 26548
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

tgr:
"Nu börjar vi komma in på sådant som jag har mycke mer koll på än elektronik. Script har jag gjort en hel del"

:D
Script och hela "shell-språket" är bra uppfinningar. :)

Jag testade ncftpput (mode 2) och det fungerar perfekt! Har även ändrat tiden mellan varje uppladdning till 5 minuter istället för 1. För, som sagt, hur ofta kommer någon läsa datat i filen? Inte så ofta. Intervallet på 1 minut var visserligen bara i test-stadiet för att se så att allt uppdaterades som det skulle, utan att behöva vänta flera minuter.

Tyvärr stödjer inte mitt konto hos webhotellet ssh och rsync. Däremot skulle man kunna använda php (eller perl.) Bra idé! :)



sodjan:

>>> Har det inte med redirect av sysin att göra ?

>> Det låter bekant. Sedan gäller det att komma på hur man gör.

> För ett nomalt EXE är det väl ">" eller "<".

Som jag skrev tidigare så har jag inte lyckats pipa in svaren till ftp (kommandot). Ftp (samma kommando) berättar hela tiden att: "usage: host-name [port]"


>> jag har tänkt använda inloggningen i ett script

> Jo, men det var inte frågan, utan poängen är *hur* scriptet körs.

Jag förstår hur du menar. Scriptet startas med jämna mellanrum av crontab.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Du tycks ju ha löst det, men jag är bara lite nyfiken... :-)

> Jag förstår hur du menar. Scriptet startas med jämna mellanrum av crontab.

OK, var kommer då "usage: host-name [port]" texten ?
Crontab startar väl inte processen mot en terminal ?
tgr
Inlägg: 726
Blev medlem: 10 maj 2006, 09:17:07
Ort: Mölndal

Inlägg av tgr »

jimmy: Hur använder du siffran på hemsidan? Jag tycker själv det är roligare att göra grafer för att se förändringen av en temp. prova rrdtool. Eller stoppa in siffrorna in en databas så du kan göra dygnsmedel å dagsmedel osv...
Användarvisningsbild
JimmyAndersson
Inlägg: 26548
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

sodjan:

> OK, var kommer då "usage: host-name [port]" texten ?

Den kommer lyckligtvis inte någonstans längre. :) Jag fick bara upp den texten när jag körde med programmet Ftp och det var något fel med hur jag angav användarnamn och lösenord.

> Crontab startar väl inte processen mot en terminal ?

Hm, det enda jag vet är att crontab laddas när jag startar Linux och körs därefter enligt hur jag konfigurerat den. Se längst ner i detta inlägg för en lista på hur jag gjort.

Tyvärr kan jag inte ge bättre svar på detta. :oops:


tgr:
Jag har sparat det roligaste arbetet till sist, nämligen att göra en sida med temperatur-statistik och grafer. Filen ute.txt är bara själva datafilen. Det kommer att bli en sådan fil per temperatur-sensor.

Gjorde förresten en liten enkel sida på www.varion.se/temperatur tidigare idag. Kommer lägga in RRDtool på samma adress sedan.





Tänkte sammanfatta hela den här kedjan:
(allt nedanstående sker på Linux-burken)

1.) Owfs läser av temp-sensorn och sparar i /mnt/1wire/10.17A1E9000800/temperature
("temperature" är alltså en virtuell fil, eller hur man ska beskriva det.)

2.) I filen "script" finns två rader:

cat /mnt/1wire/10.17A1E9000800/temperature | bc -i -q > /home/katalog/temperatur/ute.txt
ncftpput -a -V -f login.cfg /www/remote-dir /home/katalog/temperatur/ute.txt


Den översta raden kopierar från owfs till en "riktig" fil och passar på att snygga till filen lite. Den understa raden kopierar till mitt webhotell (inte min Linux-burk, utan ett konto hos Unisite.se)

3.) Scriptet körs var 5e minut, tack vare crontab där jag lagt in en rad som ser ut såhär:
*/5 TAB * TAB * TAB * TAB * TAB /home/katalog/temperatur/./script
(Istället för "TAB" ska det alltså vara riktiga tabbar.)


Filen "login.cfg" (som syns i understa raden på scriptet) ligger i /root och ser ut såhär:
host ftp.adress.zz
user namn
pass lösen
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Äh, vi struntar i det, vi snackar runt varandra... :-)

*Självklart* menade jag med den vanliga/standard FTP klienten !
Och med scriptet startat från crontab.
Var hamnade *då* utskriften ?

Att du inte får det med det FTP verktyg du använder *nu* är ju uppenbart...

Min poäng (vad det nu spelar för roll :-) ) är att jag fortfarande inte
är överygad om att det inte skulle fungera med standard FTP klienten...
Användarvisningsbild
JimmyAndersson
Inlägg: 26548
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Jo, det är lätt att det blir missförstånd. Titta bara på raden:

> Var hamnade *då* utskriften ?

Ta det på rätt sätt, men det vore lätt hänt att svara "På skärmen". Eller hur? :)
Men nu är det naturligtvis inte det du vill veta. Efter att ha läst de senaste inläggen några extra gånger så *tror* jag att jag förstår: :)

Nedanstående är med standard FTP-klienten:
När scriptet körts från crontab så hamnar man vid prompten igen, precis som om allt var som det skulle. Men crontab fungerar så att man får ett mail till användaren om något av det crontab kör inte skulle fungera. Troligen hamnar "usage: host-name [port]" där. Tyvärr kan jag inte verifiera det eftersom jag inte konfigurerat någon mail på Linux-burken. Hur vet jag då att jag även får "usage: host-name [port]" när jag kör med crontab? Bra fråga, svaret är att jag under en testperiod använde &> logfil för att skicka scriptets utdata till en logfil.

Fick du veta något användbart? :)


Jo, du kan mycket väl ha rätt i att det skulle fungera med standard FTP-klienten. Det vore kul om det gick att lösa.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> men det vore lätt hänt att svara "På skärmen".

Kanske det, men jag antog att ett script som körs från
crontab inte har någon "skärm", det var därför jag undrade
var texten hamnade. Men du styrde alltså om sysout till en fil.
Helt OK.

Sedan kan man tycka att man skulle kunna göra likadant med sysin.
Eller att sysin automatiskt "läses" från själva scriptet.

Slutligen, så betyder ju bara "usage" meddelandet att du har fel syntax,
så det var inte så intressant i detta samanhang. "Username:" prompten
hade varit mer intressant, då hade ju i alla fall syntaxen varit korrekt... :-)

> Jo, du kan mycket väl ha rätt i att det skulle fungera med standard FTP-klienten. Det vore kul om det gick att lösa.

Jag vet inte om du har testat det, men om du skapar ett script som ser ut något i stil med :

ftp <din-host>
<ditt-username>
<ditt-password>
pwd ....
put ....
quit

(i princip, lägg till lämpligt unix pyssel...)

och sedan kör det i cron (via crontab), då fungerar det alltså inte !?
I så fall ger jag upp... :-)
tgr
Inlägg: 726
Blev medlem: 10 maj 2006, 09:17:07
Ort: Mölndal

Inlägg av tgr »

Problemet med vanlig standard input eller < är att den kastar in allt på en gång medans ftp vill ha lite åt gången. Det funkar sådeles inte så bra om man inte har någon wrapper runt om som kan vänta på text och sedan skicka. PPP för modem funkar att göra så med. Där kan man säga att man ska vänta på t.ex. "username:" och sedan skicka för att vänta på nått annat igen.

Ni har för övrigt rätt angående vad som händer med output från ett script/program som körs i en cron.
Istället för &> fil kan man dela upp det i två delar. stdout heter 1> och stderr heter 2>. Jag brukar ofta skicka 1> /dev/null för att slippa skräp medans jag vill ha errors i mail och sådeles inte skriver ut 2>.
Användarvisningsbild
JimmyAndersson
Inlägg: 26548
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

sodjan:

angående:
ftp <din-host>
<ditt-username>
<ditt-password>
pwd ....
put ....
quit


>och sedan kör det i cron (via crontab), då fungerar det alltså inte !?

Tyvärr inte. När första raden körts så får jag bara "usage-raden". När scriptet sedan går ner till andra raden så har redan ftp-kommandot körts färdigt, så programmet bryr sig inte om resten.


tgr:

Kul med en tillbakablick på stdout och stderr, hade totalt glömt att det hette så. Jo, jag brukar också skicka iväg eventuell ut-data från crontab till /dev/null

Förresten: Om jag vill att t.ex stderr ska hamna på skrivaren. Hur gör jag då? Det händer inget om jag använder >lp0 . Testade även med echo hej >lp0 (i shell alltså, inget script) men det händer absolut ingenting. Markören (på skärmen) hamnar bara på nästa rad som om inget hade hänt ..och det har det inte heller. Varför? :)
tgr
Inlägg: 726
Blev medlem: 10 maj 2006, 09:17:07
Ort: Mölndal

Inlägg av tgr »

echo hej >lp0 borde skapa en fil som heter lp0 med innehållet "hej" där du kör kommandot. Fast du kanske menade echo hej >/dev/lp0 och det borde funka. Förutsatt att det är lp0 som din port heter och inte par0 eller något annat.
Det går även å spela musik igenom att köra cat musikfil.wav >/dev/dsp :)
Användarvisningsbild
JimmyAndersson
Inlägg: 26548
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Så sant, jag menade echo hej>/dev/lp0 :)
Tyvärr fungerar inte par0 heller. Finns det fler varianter jag kan testa?

"Det går även å spela musik igenom att köra cat musikfil.wav >/dev/dsp"

Kul :D
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

tgr> Ni har för övrigt rätt angående vad som händer med output från ett script/program som körs i en cron.

Och vad händer (om något) med stdin ?

JimmyAndersson> När första raden körts så får jag bara "usage-raden".

Var då ? I filen som du har "styrt" stdout till ?
Skriv svar