Kirjoittaja Aihe: Miksi cron herjaa skriptin yhdestä vertailusta, muttei muista? [RATKAISTU]  (Luettu 3810 kertaa)

Tha-Fox

  • Käyttäjä
  • Viestejä: 3315
  • Arch Linux && CentOS
    • Profiili
    • http://kettu.dy.fi
Tomin (ex-Tomppeli) teki tässä ketjussa skriptin, joka päivittää dy.fi -osoitetta sopivin välein. Olen nyt ehkä viikon verran saanut päivittäin valitusta cronilta tuon skriptin rivistä 44. Virhe liittyy vertailuun:

Koodia: [Valitse]
dy_fi_update_skripti.sh: line 44: [: !=: unary operator expected
Googlettelin tuota ja löysin tämän. Eli lainausmerkkien lisääminen verrattaviin auttaa. Se ei kuitenkaan selitä mielestäni sitä, miksi valitus tulee tuolta riviltä, eikä jo aiemmin. Tässä esim. rivi 39, josta ei siis anna herjaa:

Koodia: [Valitse]
if [ $DAY_cur != $DAY_old ]

ja tässä tuo rivi hieman alempaa, josta tulee herja:

Koodia: [Valitse]
elif [ $IP_cur != $IP_old ]
Liittyykö tuo nyt jotenkin siihen, että herjaa antavalla rivillä käytetään else iffiä? Parempaakaan en keksi.

Edit: Ratkaistu. Tuo skripti hakee ulkoisen osoitteen sivulta www.whatismyip.org ja se näkyy olevan nyt alhaalla.
« Viimeksi muokattu: 06.07.10 - klo:09.38 kirjoittanut Tha-Fox »

cabaro

  • Käyttäjä
  • Viestejä: 131
    • Profiili
Tomin (ex-Tomppeli) teki tässä ketjussa skriptin, joka päivittää dy.fi -osoitetta sopivin välein. Olen nyt ehkä viikon verran saanut päivittäin valitusta cronilta tuon skriptin rivistä 44. Virhe liittyy vertailuun:

Koodia: [Valitse]
dy_fi_update_skripti.sh: line 44: [: !=: unary operator expected
Googlettelin tuota ja löysin tämän. Eli lainausmerkkien lisääminen verrattaviin auttaa. Se ei kuitenkaan selitä mielestäni sitä, miksi valitus tulee tuolta riviltä, eikä jo aiemmin. Tässä esim. rivi 39, josta ei siis anna herjaa:

Koodia: [Valitse]
if [ $DAY_cur != $DAY_old ]

ja tässä tuo rivi hieman alempaa, josta tulee herja:

Koodia: [Valitse]
elif [ $IP_cur != $IP_old ]
Liittyykö tuo nyt jotenkin siihen, että herjaa antavalla rivillä käytetään else iffiä? Parempaakaan en keksi



The "=" comparison operator is for strings, while "-eq" is used for numerical comparisons.


kokeile korvata
Koodia: [Valitse]
!=   -ne :lla

Tha-Fox

  • Käyttäjä
  • Viestejä: 3315
  • Arch Linux && CentOS
    • Profiili
    • http://kettu.dy.fi


The "=" comparison operator is for strings, while "-eq" is used for numerical comparisons.


kokeile korvata
Koodia: [Valitse]
!=   -ne :lla

Kokeilin tuota jo aiemmin, mutta ei apua. Skripti sinänsä toimii, koska dy.fi -osoite päivittyy kyllä tunnollisesti. Nyt huomasin, että käsin ajaessa tuo itkee, ettei löydä funktiota ja kaarisulkeistakin valitti.

Ihmetyttää vain, että mikä tuon skriptin on yhtäkkiä sotkenut, kun ei siihen kukaan ole koskenut...

timbba

  • Käyttäjä
  • Viestejä: 1413
    • Profiili
Suoritetaanko skripti silloin kun internet-yhteyttä ei ole? Tällöin varmaankin "IP_cur" on tyhjä ja sitä myöten tulee erroria kun ei ole lainausmerkkejä. Olisko syy siinä?

Tha-Fox

  • Käyttäjä
  • Viestejä: 3315
  • Arch Linux && CentOS
    • Profiili
    • http://kettu.dy.fi
Suoritetaanko skripti silloin kun internet-yhteyttä ei ole? Tällöin varmaankin "IP_cur" on tyhjä ja sitä myöten tulee erroria kun ei ole lainausmerkkejä. Olisko syy siinä?

Skriptiä suoritetaan 6h välein ja kyseessä on palvelin, joka on likipitäen aina päällä ja verkossa. Ei pitäisi siis tuosta olla kiinni.

Mutta mutta... Tyrkkästi juuri oikeaan suuntaan! Tuo skripti hakee ulkoisen osoitteen sivulta www.whatismyip.org ja se näkyy olevan nyt alhaalla. Täytyykin tutkia, onko tuo pysyvää vai onko siellä vain palvelin hetkellisesti nurin.

maku

  • Käyttäjä
  • Viestejä: 34
    • Profiili
Ei nyt varsinaisesti liity otsikon aiheeseen, mutta jos dy.fi on käytössä niin kannattaa myös asentaa heidän tekemänsä dyfi-update.pl scripti, joka on toiminut luotettavasti jo pitkään. Eli täältä: http://www.dy.fi/page/clients

cabaro

  • Käyttäjä
  • Viestejä: 131
    • Profiili
Suoritetaanko skripti silloin kun internet-yhteyttä ei ole? Tällöin varmaankin "IP_cur" on tyhjä ja sitä myöten tulee erroria kun ei ole lainausmerkkejä. Olisko syy siinä?

Skriptiä suoritetaan 6h välein ja kyseessä on palvelin, joka on likipitäen aina päällä ja verkossa. Ei pitäisi siis tuosta olla kiinni.

Mutta mutta... Tyrkkästi juuri oikeaan suuntaan! Tuo skripti hakee ulkoisen osoitteen sivulta www.whatismyip.org ja se näkyy olevan nyt alhaalla. Täytyykin tutkia, onko tuo pysyvää vai onko siellä vain palvelin hetkellisesti nurin.

Skriptissä kannattaisi ehkä ensin tarkistaa, onko tuo sivu ylhäällä (http return code)

Koodia: [Valitse]
$ wget -N www.whatismyip.org
--2010-07-06 10:19:32--  http://www.whatismyip.org/
Resolving www.whatismyip.org... 98.207.226.113
Connecting to www.whatismyip.org|98.207.226.113|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/plain]
Saving to: `index.html'

    [ <=>                                                                       ] 13          --.-K/s   in 0.001s 

Last-modified header missing -- time-stamps turned off.
2010-07-06 10:19:35 (16.6 KB/s) - `index.html' saved [13]

Tätä riviä haetaan:
HTTP request sent, awaiting response... 200 OK

Itse tekisin ehkä perlillä tähän tapaan:

Koodia: [Valitse]
#!/usr/bin/perl -w
use strict;
use LWP;

my $url = 'http://www.whatismyip.org';
my $browser = LWP::UserAgent->new;
my $response = $browser->get( $url );
my $status = $response->code;

if ( $status eq '200' || $status eq '302' ){
    print "HTTP return code $status\t$url is up\n";
}else{
print "HTTP return code $status\t$url is down\n";
}

Tha-Fox

  • Käyttäjä
  • Viestejä: 3315
  • Arch Linux && CentOS
    • Profiili
    • http://kettu.dy.fi
Hyvä ehdotus! Täytyy tutkia, miten tuon saisi toimimaan bashissa.

cabaro

  • Käyttäjä
  • Viestejä: 131
    • Profiili
Hyvä ehdotus! Täytyy tutkia, miten tuon saisi toimimaan bashissa.

Helppoo ku heinänteko  ;D

Koodia: [Valitse]
if wget http://www.whatismyip.com
then echo site is up
else echo site is down
fi
« Viimeksi muokattu: 06.07.10 - klo:11.41 kirjoittanut cabaro »

Tomin

  • Palvelimen ylläpitäjä
  • Käyttäjä / moderaattori+
  • Viestejä: 11481
    • Profiili
    • Tomin kotisivut
Voisi myös vaihtaa tuon whatismyip:n dy.fi:ksi: http://checkip.dy.fi/, tosin tuosta voisi poistella ylimääräiset tagit ja kirjaimet, jonka voisi tehdä jotenkin tähän tyyliin:
Koodia: [Valitse]
wget -qO - http://checkip.dy.fi/ | sed -e "s/\([<\/>: a-zA-Z]\)//g"Tuosta olisi se etu, että se olisi riippuvainen vain dy.fi:stä, joka taas on ollut melko vakaasti pystyssä.

Muokkaus: Ja eipä aikaakaan, kun sain aikaiseksi korjatun skriptin. Tosin tämä on siitä tyhmä, että se tarkistaa onko checkip.dy.fi pystyssä ja jos ei ole niin se päivittää ip:n joka tapauksessa, mutta silloin lienee todennäköistä, että dy.fi ei ole pystyssä ollenkaan. Lisätoimintoina tuohon voisi ohjelmoida vaikka vara järjestelmäksi IP:n tarkistukseen whatismyip:n, jos dy.fi jostain syystä lopettaisi tuon checkip:nsä sekä varmistaa, että myös IP:n päivitys on mahdollista.

Tarkistusta ei ole testattu perinpohjin, koska käytän OpenDNS:ää, josta saa vastauksen joka tapauksessa, joten en ole varma voinko testata sitä kovin järkevästi ollenkaan. Virheitä siis saattaa olla, joten kannattanee tarkistaa se skripti. :)

Muita muutoksia on tuo tempin nimi, joka on nyt oletuksena muotoa /tmp/dy_updater_osoitteesi.dy.fi.tmp ja temppi tiedosto tehdään yhdellä komennolla.

[ylläpito on poistanut liitteen]
« Viimeksi muokattu: 06.07.10 - klo:12.29 kirjoittanut Tomin »
Automaattinen allekirjoitus:
Lisäisitkö [RATKAISTU] ketjun ensimmäisen viestin aiheeseen ongelman ratkettua, kiitos.