Gå til innhold
Presidentvalget i USA 2024 ×

[Løst]Program som ser etter en fil på nettet og utfører ...


Anbefalte innlegg

Er ute etter et program som kjører i bakgrunnen, det skal hvert 10 minutt eller så (gjerne konfigurerbart) sjekke om en fil ligger på nettet (type www.eksempel.com/filen.html) og utifra det utføre en helt standard ledetekstkommando (den kan være "statisk" eller bare starte en fil hvis det er enklere).

 

Tenkte det var like greit å spørre her da min googling ikke har gitt meg svar på dette (er et såpass spesifikt spørsmål at det ikke er sikkert dette finnes). Lurte derfor på om noen kunne ta seg bryet med å kode dette?

 

Hvis noen vil ha hele bakgrunnhistorien til dette så er det bare å spørre, ellers er det bare å spørre hvis det er noe som er uklart. :)

Lenke til kommentar
Videoannonse
Annonse

Du kan lage et bash-script f.eks som cron kjører hvert 10 minutt:

#!/bin/bash
if wget --spider -S www.minurl.no/fil.html 2>&1 | grep -q "HTTP/1.1 200 OK"
then 
foo 
else 
bar 
fi

 

'foo' er kommandoen som blir kjørt hvis filen fins, 'bar' hvis ikke. Hvis du bruker windows kan du laste ned cygwin for å få bash, wget og grep og det fins cron for windows også hvis det ikke er en enklere måte å gjøre det på. Hvis du kaller scriptet script.sh f.eks putter du dette i cron-fila:

/10 * * * * user /path/to/script.sh hvor user er brukernavnet ditt (eller root).

Endret av teflonpanne
Lenke til kommentar

Okay, du sa ikke hvilket os du brukte, så jeg bare skrev det enkleste jeg kom på :)

 

Om det er den beste vet jeg ikke, men det er enkelt ihvertfall, bare en if-test. Hvis du ikke vil bruke cygwin og sånn så vet jeg ikke om det går an med windows' batch-script, så det er mulig du må programmere noe. Men det er ikke veldig vanskelig eller mye med perl/php/python og curl-biblioteket f.eks. Men det må du nesten spørre noen windowsfolk om.

Lenke til kommentar

Min feil at jeg ikke nevnte OS. Batch kan såvidt meg bekjent ikke se etter filer på nettet (i hvert fall ikke med vanlig if kommando) så det spørs om jeg ikke skal lage en post i python delen av forumet (har fått det for meg at python er veldig lettvint etter å ha lest xkcd :!: ), eller bør jeg kanskje legge det et annet sted?

 

Takker for svar. :)

Endret av hernil
Lenke til kommentar

Jeg mekket en i .NET som gjør dette

Jeg har testet at det fungerer i Linux også hvis det noensinne blir aktuelt.

 

Temmelig simpelt

første parameter må være tid, du spesifiserer hvor lang tid ved et postfix, som kan være s, m, h og d. dersom ingen er spesifisert, vil den gå utifra at du mener sekunder.

Andre parameter er kilde-URL

Tredje parameter er valgfritt og er der filen skal lagres (enten mappe eller filnavn) hvis ingenting spesifiseres, så bruker den CD

 

eks. dnsched 10m https://www.diskusjon.no/uploads/av-31659.gif C:\

 

Jeg laget en egen tråd istedet for å bruke timer, men ser i ettertid at det var unødvendig.

 

Anyways, gidder ikke endre på det.

Programmet ligger i bin/Release

dnsched.zip

Endret av GeirGrusom
Lenke til kommentar

Hei. Takker så mye for at du gidde rå hjelpe. Er første gangen jeg er borti .NET så er litt usikker på hvordan dette skal gjøres. Antar parametrene ligger i main.cs fila? Gidder du å vise meg hvordan fila skulle sett ut hvis den hvert 20 minutt skulle se etter fila som ligger på www.hernil.com/fil.html og starte fila C:\hernil.bat?

 

Det hadde hjulpet meg godt i gang. Går forresten utifra at .exe fila skal legges i oppstart hvis jeg vil at den skal kjøre hele tiden?

 

Nok en gang takk for hjelp! :)

Lenke til kommentar

Ok, måtte bare legge til muligheten for å starte et program

 

dnsched 20m www.hernil.com/fil.html -e:C:\hernil.bat

 

Du kan eventuelt lage en bat fil som starter pogrammet ved oppstart eller whatnot.

Det kan være hendig å spesifisere hvor du legger fil.html hvis andre programmer skal bruke det, ellers bruker den der hvor commandlinen starter

 

dnsched 20m www.hernil.com/fil.html C:\temp -e:C:\hernil.bat

dnsched.zip

Lenke til kommentar

Sånn!

 

Legg til -c på slutten, så vil den ikke laste ned fila, men istedet bare sjekke om den finnes

 

Kjapp overgang over hva den gjør:

Du spesifiserer et visst intervall den skal utføre dette på

og ved det intervallet laster den ned, eller sjekker om en fil eksisterer, og dersom den gjør det, så utføres eventuelt en fil. Dersom fila ikke eksisterer, fortsetter programmet som vanlig.

 

Programmet avsluttes med Ctrl+C (ihvertfall på min linux maskin)

 

dnsched 20m www.hernil.com/fil.html -e:C:\hernil.bat -c

dnsched.zip

Endret av GeirGrusom
Lenke til kommentar

Takk, men hvordan starter jeg herligheten? :blush:

 

Hvis jeg vil sjekke hvert 20 minutt om fila www.hernil.com/fil.html finnes, hvis den gjør det så skal den starte fila hernil.bat, hvor skal dette konfigureres? Er sikkert jeg som ikke skjønner. :whistle:

Endret av hernil
Lenke til kommentar

Det første parameteret sier hvor langt intervallet er

20 = 20 sekunder

20s = 20 sekunder

20m = 20 minutter

20h = 20 timer

20d = 20 dager

 

Det andre parameteret er filen som skal hentes, og deretter et parameter som begynner med -e: som deretter etterfølges tett av filen som eventuelt skal utføres.

-c forteller den at den ikke skal laste ned noenting, bare sjekke om fila finnes.

 

Lag en bat fil eller noe i startup mappe e.l.

 

Programfila finner du som sagt i bin\Release

Endret av GeirGrusom
Lenke til kommentar

Ok, jeg laget et annet program som krever litt mer konfigurering. Det eneste programmet gjør, er å laste ned en fil eller sjekker om den er der, og returnerer 0 dersom fila eksisterer på serveren, og 1 dersom den ikke gjør det.

 

Da kan en bruke IF ERRORLEVEL i batchscript for å sjekke resultatet, og utføre handling deretter.

Men dette må legges i et batch script som kjøres av Windows Scheduler e.l.

 

Hvis det skal gjøres av et program, skal det første programmet jeg laget fikse biffen, men dette er kanskje mer alvendelig.

webdn.zip

Lenke til kommentar

Bare for moro skyld sån på 1 2 3, mekka et lite demo vbs-script som svarer til jobben. Det sjekkes om index.html på vg eksisterer. Kjør scriptet for å se hvordan det fungerer. Endre så i URL-variabelen index.html til for eksempel index1.html og kjør scriptet. Scriptet stoppes ved å avslutte wscript.exe i task managers prosessvindu.

 

Set WshShell = WScript.CreateObject("WScript.Shell")
On Error Resume Next
URL = "http://www.vg.no/index.html" 'siden som skal sjekkes
Do
wscript.sleep 10000 'hvert 10. sekund
Set HTTP = CreateObject("MSXML2.XMLHTTP") 
HTTP.Open "GET",URL,FALSE
HTTP.Send
If HTTP.statusText ="OK" Then
'Sett inn det som skal gjøres
MsgBox("Er tilgjengelig") 'ta denne vekk f.eks.
'WshShell.run ("Notepad.exe") 'starter notepad som eksempel
Else
'Det som eventuelt skal gjøres hvis ikke tilgjengelig
MsgBox("Er ikke tilgjengelig") 'ta denne vekk f.eks.
End If
loop

Lenke til kommentar

Fikk det endelig til å funke, hadde ikke fått med meg at det var start parametere det var snakk om. :p

 

Det ser ut til å funke bra, eneste jeg vil nå er at programmet skal kjøre i bakgrunnen, altså uten noen som helst form for vindu. Går det an? :)

 

Skal se om vbs scriptet også kan gjøre det jeg er ute etter.

Lenke til kommentar

Det funka. Den gjør det jeg er ute etter. Eneste jeg kan sette fingeren på er at like etter at den har startet fila får jeg en melding om at programmet måtte avsluttes. Det er ikke noe egentlig problem til det jeg skal bruke den til, men hvis du har lyst til å bruke enda mer av lørdagen din til å se på det så vet du ihvertfall om det. :p

 

Tusen takk for hjelp. :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...