- Anders T
- Medlem ●
- Köping
Jag har behov av en lösning som med 5 min intervall laddar ner ett antal filer via http och sedan laddar upp dom till en FTP-server.
En basketklubb jag är med i använder Google Kalendern ihop med Phpicalendar. Vi har alla träningar, matcher etc inlagt där och visar detta på vår hemsida. Google används på grund av att det är lätt att administrera för mig när det ser lika ut för alla inblandade oberoende av dator.
Det finns dock stora problem med prestandan med Phpicalendar ihop med Google. Vi har inte tillgång till webbservern för diverse cache-lösningar som förslås när man frågar runt lite. Jag tänkte istället ladda ner .ics-filerna från Google och ladda upp dom tiill vår FTP. Det kan räcka med ett intervall på 5 minuter. Jag har tillgång till en OS X-server som rullar 24/7 som jag skulle kunna använda.
Finns det något avancerat FTP-program som skulle kunna sköta större delen av jobbet eller behöver man scripta lösningen (vilket jag i så fall behöver hjälp med)?
En typisk länk som ska laddas ner ser ut så här:
http://www.google.com/calendar/ical/ei8lhrf06f3pvv7704f33a9vl8%40group.calendar.google.com/public/basic.ics
Fick tips om JaSFtp. Kan både ladda ner från webben och ladda upp till FTP med inbyggd automatisering.
100USD verkade ju inte lite väll dyrt för det programmet, men om du verkligen vill så, detta är annars lätt löst genom lite shellscriptning som då kostar 0USD eftersom verktygen redan finns med i OS X.
personligen använder jag en liten ftp klient som är för terminalen som heter lftp som man kan installera med hjälp av macports eller fink etc, denna stödjer att man laddar den med väldigt enkla scripts som den utför samt att ladda ner saker över http (och en del andra protokol), den laddar bland annat upp en rss feed åt mig automatiskt.
Jag rekommenderar att använda scp (kopiering via ssh). Om du genererar nycklar och ställer in det rätt kan du med ett cronskript kopiera fil från lokal dator till server på bestämda interval. Det går säkert lösas med applescript eller automator också.
Jag rekommenderar att använda scp (kopiering via ssh). Om du genererar nycklar och ställer in det rätt kan du med ett cronskript kopiera fil från lokal dator till server på bestämda interval. Det går säkert lösas med applescript eller automator också.
Hur tusan ska han lösa ftp och http överföringar med secure copy ????
Hur tusan ska han lösa ftp och http överföringar med secure copy ????
scp är istället för ftp. Betydligt bättre eftersom lösenord inte skickas i klartext. http-överföringen (tanka ner från google) är ju inga problem, går att fixa med curl, wget eller Automator.
Jag skulle gjort:
(var femte minut, cron)
* Ladda ner från google med curl
* Ladda upp till servern med scp
Det är ungefär samma som mry's kodsnutt gör men med scp istället för ftp.
Hej!
Enklast är att schemalägga ett script för detta.
Du kan köra curl som kommer med os x för att hämta hem filen och sedan ladda upp den till din ftp yta.
Ett exempel för din ovanstående fil:
curl http://www.google.com/calendar/ical/ei8lhrf06... | curl -u användarnamn:lösenord ftp://ftp.domän.se/katalognamn/basics.ics
Den här snutten kan du spara och sedan schemalägga via cron.
/matt
...Den här snutten kan du spara och sedan schemalägga via cron.
/matt
Jag tror du misstar mig för någon som kan sånt här
FTP-problemet med extern uppladdning är löst så nu tänkte jag försöka komma till skott med ett test.
1. Vad gör jag med cron-raden så det blir ett script?
2. Ingår det omdöpning i exemplet du gjorde? Alla filer heter basic.ics när de laddas ner med behöver få nya namn på flykten så att säga.
3. Var laddas den temporära filen ner? Skriver den över nästa gång automatiskt?
4. Hur gör jag för att schemalägga filen med cron?
1. Vad gör jag med cron-raden så det blir ett script?
Testa först att bara klistra in kodraden i terminalen. Glöm inte att ersätta med ditt eget login/lösen.
2. Ingår det omdöpning i exemplet du gjorde? Alla filer heter basic.ics när de laddas ner med behöver få nya namn på flykten så att säga.
Filen kommer aldrig "sparas" lokalt utan det som tankas ner från google kommer direkt laddas upp till ftp.
3. Var laddas den temporära filen ner? Skriver den över nästa gång automatiskt?
Se ovan. Finns ingen temporär fil.
Du skriver crontab -e i Terminalen och lägger till en cronrad som ser ut som
0,5,10,15,20,25,30,35,40,45,50,55 * * * * kommandot
där kommandot ersätts med kodraden i inlägget ovan. crontab -e startar editering av fil med Mac OS X default editor i terminalen, jag kommer inte ihåg vilken det är, kanske vi eller emacs. Om du inte kommer på hur du sparar efter modifikationen säg till.
Lysande Matt! Ska testa så fort jag får möjlighet.
Just nu stötte vi på ett annat bekymmer. Vår hemsida ligger på lokala kabeloperatörens nät och de tillåter bara FTP-anslutning inifrån nätet, dvs jag kan administrera min hemsida från datorn hemma men inte från jobbet som är på annan ort. Servern som jag tänkte låna till det här befinner sig på jobbet. Förhoppningsvis kan vi få dom till att göra ett undantag.
Tack för inlägget Ciryon. De frågor jag har just nu är följande.
1. Jag vill testa av lösningen steg för steg för att hänga med i allt som händer. Jag testar således att köra en sån curl-rad i terminalen men det vill sig inte. Den verkar för det första inte gilla att det inte finns en fil med det namnet i FTP. Jag lägger då dit filen först. Då startar nerladdningsprocessen som jag kan se i Terminal. På slutet blir det dock ett fel:
BEGIN:VCALENDAR VERSION:2.0 X-WR-CALNAME:Extra ... ... END:VEVENT END:VCALENDAR % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 32 3419 32 1170 0 0 2019 0 0:00:01 --:--:-- 0:00:01 2019 curl: (23) Failed writing body
Detta kör jag
curl http://www.google.com/calendar/ical/ei8lhrf06... | curl -u kontonamn:password ftp://ftp.server.net/kalendertest/calendars/E...
2. Jag ska som sagt ladda ner 10-15 sådana -ics-filer. Kan jag använda samma tidsintervall för samtliga cron-kommandon?
2. Jag ska som sagt ladda ner 10-15 sådana -ics-filer. Kan jag använda samma tidsintervall för samtliga cron-kommandon?
Det kan du göra genom att "loopa" flera filer
for filen in a.ics b.ics c.ics d.ics do ...kod för att ftp:a... $filen done
Det kan du göra genom att "loopa" flera filer
for filen in a.ics b.ics c.ics d.ics do ...kod för att ftp:a... $filen done
Är a, b, c, d exempel som motsvarar hela länken till Google?
Vad ska in istället för "filen"?
Jag googlade fram lite Terminal-tips om FTP. Jag har skickat upp en .ics-fil vilket gick bra.
ftp> put Extra.ics local: Extra.ics remote: Extra.ics 227 Entering Passive Mode (81,16,....). 125 Data connection already open; Transfer starting. 100% |*************************************| 3550 17.01 MB/s --:-- ETA 226 Transfer complete. 3550 bytes sent in 00:00 (15.98 KB/s) ftp>
Grejen är ju att du vill skicka upp till ftp automatiskt, utan att behöva logga in. Det var därför jag rekommenderade scp ovan. Om du gör en ny fil och kallar den "getandsend.sh" t.ex. så kan du fylla den med:
#!/bin/sh curl http://www.google.com/calendar/ical/ei8lhrf06... > ~/basic.ics scp ~/basic.ics [email protected]:~/din/mapp/pa/servern
(ersätt med din info)
Ställ in cron så att getandsend.sh körs istället. Det du måste göra för att få detta att funka är
1) Kolla att du kan komma åt servern med SSH (är det en Mac så finns det klart)
2) Kolla guiden för scp jag länkade till ovan och ställ in så du slipper skriva in lösen då filen kopieras.
edit: Jag sticker hem från jobbet nu, så nån annan kanske kan fortsätta snickra ihop ett lämpligt skript (eller anann lösning)
Det är lokala kabelbolagets webbserver där deras kunder har sina hemsidor. Det är väl inte troligt att jag kan SSH:a in där eller? Det är en Win-burk för övrigt.
Remote server is running Microsoft FTP Service.
220: webserver Microsoft FTP Service (Version 5.0).
Jag orkade inte med att se era försök och hade inget bättre för mig ute i hängmattan då jag slösurfade.. så här kommer en lösning till problemet.
(entity@ran ~/downloads): ./magic-uploader.sh download of name.ics ok upload of name.ics ok download of name2.ics ok upload of name2.ics ok download of name3.ics ok upload of name3.ics ok
så ser det ut då man kör, är ett script som heter magic-uploader.sh (i brist på annat fyndigt namn) och en configurationsfil som då heter configfile.conf
http://www.dnz.se/misc/magic-uploader.sh
http://www.dnz.se/misc/configfile.conf
configfilen funkar som så att det är:
<namn som du vill att den skall laddas upp som>|<url till google cal basics.ics fil> <namn som du vill att den skall laddas upp som>|<url till google cal basics.ics fil> <namn som du vill att den skall laddas upp som>|<url till google cal basics.ics fil>
en per rad.
scriptet i sig kan ni läsa här:
#!/bin/sh # magic uploader by anders.lindback [at] dnz.se # provided under BSD license. # no implied or stated warranty applies. # if this eats your data or ends your marrige, dont blame me. # SETTINGS CONFFILE="/some/path/to/configfile.conf" WORKDIR="/tmp/" # dont change unless needed. UPLOADHOST="host.domain.tld." UPLOADDIR="/path/to/dir" # remember / as first char. UPLOADUSER="somerandomuser" UPLOADPASS="somerandompass" # MAGIC DONT TOUCH UNLESS YOU HAVE A CLUE cd $WORKDIR for i in `cat $CONFFILE`; do NAME=`echo $i | awk -F"|" '{print $1}'` URL=`echo $i | awk -F"|" '{print $2}'` ftp -o ${WORKDIR}${NAME} $URL >/dev/null 2>&1 if [ $? -ne 0 ]; then echo "dowload of $NAME failed" continue else echo "download of $NAME ok" fi ftp -u ftp://${UPLOADUSER}:${UPLOADPASS}@${UPLOADHOST}/${UPLOADDIR}/${NAME} ${NAME} >/dev/null 2>&1 if [ $? -eq 255 ]; then echo "upload of $NAME ok" else echo "upload of $NAME might have failed, errorcode: $?" fi rm ${WORKDIR}/${NAME} done
finns ingen anledning att använda nått annat än det inbyggda ftp komnandot i OS X då detta är standardunix ftp hanterar det även http etc.
Hej!
Mitt exempel hämtar en ics fil och skickar upp den till din ftp. Kodsnutten är en rad men innehåller två kommandon; den första hämtar och den andra skickar upp den. Det är samma program som används.
Om du skall hämta flera filer är det enklast att samla alla steg i ett script. Scriptet schemalägger du mha cron.
Angående namnet på filen som skickas upp så kan du välja vad som helst.
Scriptet är ju bara en textfil. Den skall sedan flaggas som "executable".
chmod +x /sökvägtillscriptet
Cron är ju ett ganska rudimentärt schemasystem men funkar kanon. Formatet är kryptiskt dock, precis som allt annat unix...
Först MÅSTE du dock kontrollera att det inte redan finns schemalagda job via cron. Bäst är väl om du kollar med server admin innan...
Jag brukar dumpa ut crontab resultatet till en fil, så jag alltid har en backup:
crontab -l > crontab_schedule
Denna fil kan du sedan ändra i och skicka till crontab (efter du backat den...). Om det inte finns några cron job, så skapas inte filen.
Filen har följande format (http://en.wikipedia.org/wiki/Crontab#Common_mistakes):
# Use the hash sign to prefix a comment # +---------------- minute (0 - 59) # | +------------- hour (0 - 23) # | | +---------- day of month (1 - 31) # | | | +------- month (1 - 12) # | | | | +---- day of week (0 - 7) (Sunday=0 or 7) # | | | | | # * * * * * command to be executed
Så i ditt fall borde din rad för scriptet vara:
5 * * * * /sökväg/scriptnamn.sh
dvs, var femte minut varje dag.
curl kan även skicka via ftps om du vill ha det säkert. Men varför komplicera det? Det är ju ändå bara kalender filer. Du kan ju skapa en användare som är låst till en viss katalog och bara tillåta ics filer vid uppladdning.
crontab är dock smart nog att inte låta dig skriva ngt som är uppåtväggarna fel..
(entity@ran ~): crontab -e crontab: no crontab for entity - using an empty one crontab: installing new crontab "/tmp/crontab.GZ64o0uCxP":0: bad minute crontab: errors in crontab file, can't install Do you want to retry the same edit?
knappade in "random jibberish" i min crontab..
detta är ju dock om man öppnar ens crontab med editor-wrappern som man gör med -e flaggan, att manuelt ändra i crontab utan denna är bara dumt..
mry: 5 * * * * är _INTE_ var femte minut, det är 5min över varje heltimma..
för att köra något var femte minu är det:
*/5 * * * * som man skriver som tidsangivelse.
crontab kan göra mycket mer avancerade saker än så dock, ex:
*/7 11-15 * * 1-5 kör kommandot som man anger var 7minut mellan 11-15 på dagen under vardagar (mån - fre).
Det fina är dock att man måste inte krångla till det:
för att bara köra ett kommando då cron startar (vanligtvis vid boot) kan man skriva
@reboot istället för en tid, andra saker som man skriva är uppenbara så som @hourly @daily @weekly etc.
ntity nu har jag din grej redo att testas men hur kör jag .sh-scriptet? Jag vill inte lägga det i crontab innan jag testat att det funkar.
Ladda ner båda filerna magic-uploader.sh & configfile.conf, se sedan till att du har rätt inställningar, testvärdena i configfile.conf borde funkar för dig som test iaf.
Kontrollera sedan inställningarna i magic-uploader.sh, du måste ställa in lite saker i settingsdelen, så som vars du har config filen och host, mapp, användare & lösen till ftp servern som din ISP har.
efter det, öppna terminalen ställ dig i den mapp som du har magic-uploader.sh i, ställ in rättigheterna om den inte har rätt redan och kör det ex:
cd /Users/entity/Desktop ls -al magic-uploader.sh chmod 750 magic-uploader.sh ./magic-uploader.sh
den spottar nu ur sig lite om den hittar config filen, funkar allt skall de se ut som exemplet som jag visade i mitt tidigare inlägg.
PS. ändra är lättast att du använder nano i terminalen till, då det minskar riskten att du får med skräptecken eller MSDOS radbryt av textedit eller så.
nano magic-uploader.sh
i terminalen då du står i mappen som du har magic-uploader i.
ah att ftp klarar http hade jag ingen aning om! Bra att veta!
Måste dock säga att jag gillar lösningen med pipning bättre Nu har du ju en onödigt komplicerad lösning för en enkel uppgift.
Men skönt att det verkar ha löst sig för dig Anders!
ah att ftp klarar http hade jag ingen aning om! Bra att veta!
Måste dock säga att jag gillar lösningen med pipning bättre Nu har du ju en onödigt komplicerad lösning för en enkel uppgift.
Men skönt att det verkar ha löst sig för dig Anders!
Nja, han skall ju hantera en 10-15 kalendrar så lika bra att göra en bra lösning som hanterar dessa smidigt än 15st hack rader i crontab..
Nja, han skall ju hantera en 10-15 kalendrar så lika bra att göra en bra lösning som hanterar dessa smidigt än 15st hack rader i crontab..
Precis. Jag gillar config-filen där jag lätt kan ändra under resans gång.
Får dock inte scriptet att funka. Jag hade lista ut hur man ställer in i config-filen och nu kör jag i terminalen enligt inlägget en bit upp:
Anders-MacbookPro:~ anders$ cd /Users/anders Anders-MacbookPro:~ anders$ ls -al magic-uploader.sh -rwxr-x--- 1 anders admin 997 Aug 13 22:37 magic-uploader.sh Anders-MacbookPro:~ anders$ chmod 750 magic-uploader.sh Anders-MacbookPro:~ anders$ ./magic-uploader.sh download of Styrelsen.ics ok upload of Styrelsen.ics might have failed, errorcode: 1 download of Avbokningar.ics ok upload of Avbokningar.ics might have failed, errorcode: 1 download of Bollskola.ics ok upload of Bollskola.ics might have failed, errorcode: 1 download of Extra.ics ok upload of Extra.ics might have failed, errorcode: 1
Inga uppladdningar verkar funka och den stannar varje försök på 4:e raden dvs Extra.ics
är du helt säker på login uppgifter och annat som du har fyllt i?
Sen problemet om att den endast kör fyra rader låter som om du saknar en del av config filen, notera att det är viktigt med "|" tecknet mellan namnet och urlen till kalendern den måste vara med mellan fälten på varje rad.
för att se problemet med uppladdningarna, ändra på denna raden:
ftp -u ftp://${UPLOADUSER}:${UPLOADPASS}@${UPLOADHOST}/${UPLOADDIR}/${NAME} ${NAME} >/dev/null 2>&1
så att den ser ut så här:
ftp -u ftp://${UPLOADUSER}:${UPLOADPASS}@${UPLOADHOST}/${UPLOADDIR}/${NAME} ${NAME}
notera att det är ">/dev/null 2>&1" som är borta inget annat, då styr den inte om streamen från ftp så du ser eventuella felmedelanden etc.
PS du behöver inte köra chmod och resten av kommandon varje gång som du testar, endast ./macgic-uploader.sh då du redan ställt in rättigheterna på den en gång.
är du helt säker på login uppgifter och annat som du har fyllt i?
Sen problemet om att den endast kör fyra rader låter som om du saknar en del av config filen, notera att det är viktigt med "|" tecknet mellan namnet och urlen till kalendern den måste vara med mellan fälten på varje rad.
Filen efter har ett mellanslag i namnet. Är det misstänkt?
Flickor 90.ics|http://www.google.....
Såg även några filnamn med snedstreck i namnet. Har ändrat "Flickor 93/94" till "Flickor 93-94" etc. Dock får jag samma fel fortfarande.
Anders-MacbookPro:~ anders$ cd /Users/anders Anders-MacbookPro:~ anders$ ./magic-uploader.sh download of Styrelsen.ics ok Connected to min-server. 220 webserver Microsoft FTP Service (Version 5.0). 331 Password required for mitt-usernamn. 230 User mitt-usernamn logged in. Remote system type is Windows_NT. 200 Type set to I. 250 CWD command successful. 550 mitt-usernamn: The system cannot find the file specified. 221 upload of Styrelsen.ics might have failed, errorcode: 1 download of Avbokningar.ics ok Connected to min-server. 220 webserver Microsoft FTP Service (Version 5.0). 331 Password required for mitt-usernamn. 230 User mitt-usernamn logged in. Remote system type is Windows_NT. 200 Type set to I. 250 CWD command successful. 550 mitt-usernamn: The system cannot find the file specified. 221 upload of Avbokningar.ics might have failed, errorcode: 1 download of Bollskola.ics ok Connected to min-server. 220 webserver Microsoft FTP Service (Version 5.0). 331 Password required for mitt-usernamn. 230 User mitt-usernamn logged in. Remote system type is Windows_NT. 200 Type set to I. 250 CWD command successful. 550 mitt-usernamn: The system cannot find the file specified. 221 upload of Bollskola.ics might have failed, errorcode: 1 download of Extra.ics ok Connected to min-server. 220 webserver Microsoft FTP Service (Version 5.0). 331 Password required for mitt-usernamn. 230 User mitt-usernamn logged in. Remote system type is Windows_NT. 200 Type set to I. 250 CWD command successful. 550 mitt-usernamn: The system cannot find the file specified. 221 upload of Extra.ics might have failed, errorcode: 1
Såg även några filnamn med snedstreck i namnet. Har ändrat "Flickor 93/94" till "Flickor 93-94" etc. Dock får jag samma fel fortfarande.
Anders-MacbookPro:~ anders$ cd /Users/anders Anders-MacbookPro:~ anders$ ./magic-uploader.sh download of Styrelsen.ics ok Connected to min-server. 220 webserver Microsoft FTP Service (Version 5.0). 331 Password required for mitt-usernamn. 230 User mitt-usernamn logged in. Remote system type is Windows_NT. 200 Type set to I. 250 CWD command successful. 550 mitt-usernamn: The system cannot find the file specified. 221 upload of Styrelsen.ics might have failed, errorcode: 1 download of Avbokningar.ics ok Connected to min-server. 220 webserver Microsoft FTP Service (Version 5.0). 331 Password required for mitt-usernamn. 230 User mitt-usernamn logged in. Remote system type is Windows_NT. 200 Type set to I. 250 CWD command successful. 550 mitt-usernamn: The system cannot find the file specified. 221 upload of Avbokningar.ics might have failed, errorcode: 1 download of Bollskola.ics ok Connected to min-server. 220 webserver Microsoft FTP Service (Version 5.0). 331 Password required for mitt-usernamn. 230 User mitt-usernamn logged in. Remote system type is Windows_NT. 200 Type set to I. 250 CWD command successful. 550 mitt-usernamn: The system cannot find the file specified. 221 upload of Bollskola.ics might have failed, errorcode: 1 download of Extra.ics ok Connected to min-server. 220 webserver Microsoft FTP Service (Version 5.0). 331 Password required for mitt-usernamn. 230 User mitt-usernamn logged in. Remote system type is Windows_NT. 200 Type set to I. 250 CWD command successful. 550 mitt-usernamn: The system cannot find the file specified. 221 upload of Extra.ics might have failed, errorcode: 1
Ser ut som om den inte hittar den mapp som du har angett i inställningarna då den säger "550 mitt-usernamn: The system cannot find the file specified. " sen är det inte en bra ide att ha mellanslag i namnen i den version som du har, håller på fixa v2 som klarar det och har lite mer felsöknings funktioner.
Ser ut som om den inte hittar den mapp som du har angett i inställningarna då den säger "550 mitt-usernamn: The system cannot find the file specified. " sen är det inte en bra ide att ha mellanslag i namnen i den version som du har, håller på fixa v2 som klarar det och har lite mer felsöknings funktioner.
Jag har kopierat sökvägen från mitt fungerande bokmärke i FTP-programmet Transmit. Den är /mitt-username/kalendertest/calendars