Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Εχω γράψει αυτο:

    #!/bin/sh
	SUBJ="ip raspberry"
    EMAIL="[email protected]"
    ip1=""
    ip2=""
    read ip1 < ip.txt
    ip2=$(wget -qO- ifconfig.me/ip)
    if [ "$ip1" = "$ip2" ] ; then
      exit
    else
      echo "$ip2" > /media/usb0/Downloads/ip.txt
      echo "$ip2" | mail -s $SUBJ $EMAIL
      exit
     fi

προσπαθώ να στέλνω την εχτερναλ ιπ στο εμαιλ μου...μεσα απο το cron τρεχω το σκριπτ καθε 30 λεπτα....το θεμα ειναι οτι πρεπει να εχς κανει κατι λαθος γτ με σπαμαρει καθε μιση ωρα ενω δν αλλαζει η ιπ...οποτε πρεπει να εχω κανει κατι λαθος στην if...

Δημοσ.

 

Μήπως είναι αυτό?

if [ "$ip1" == "$ip2" ] ; then

 

 

Μήπως είναι αυτό?

if [ "$ip1" == "$ip2" ] ; then

το δοκιμασα πεταει compilier error

Δημοσ.

άκυρο το πρώτο..το πέρασα για ints..

 

Για δες τι επιστρέφει η wget. Μήπως έχει κανένα newline?

οταν την τρεχεις εκτος σκριπτ σου επιστρεφει κανονικα την ιπ...και στο τεχτ η ιπ υπαρχει....

Δημοσ.

Δε χρειαζόταν να το σβήσεις. Πρόσθεσε κάποιο edit από κάτω. 

 

 

Θα έπρεπε ναι. Αλλά ντράπηκα, καθώς απάντησα βιαστικά έχοντας μια άλλη περίπτωση στο μυαλό.

 

 

Δημοσ.

Σε μένα που δοκιμάζω τρέχει ο κώδικάς σου όπως αναμένεται.

 

Για δοκίμασε με την curl

ip2=$(curl ifconfig.me/ip) 

ps: Μήπως δεν έχεις δικαίωμα write στο "/media/usb0/Downloads/ip.txt", οπότε εάν πχ αρχικά δεν έχεις κάτι στο ip.txt να μην ανανεώνεται και να χτυπάει συνέχεια στο else.

Δημοσ.

Γιατι δεν δοκιμαζεις python αντι για shell script? Θα προτιμουσα κατι τετοιο:

#!/usr/bin/python
URL = "http://ipecho.net/"
IP_MASK = '\d{2,3}.\d{2,3}.\d{2,3}.\d{2,3}'
FILENAME = 'my_external_ip'
RECEIPIENT = "[email protected]"
SUBJ = "ip raspberry"

from urllib import urlopen
from re import findall
import os


def catch_exceptions(show_msg):
    def decorator(foo):
        def wrapper(*args, **kargsv):
            try:
                foo(*args, **kargsv)
            except Exception as e:
                if show_msg:
                    print e
        return wrapper
    return decorator


@catch_exceptions(False)
def get_previous_ip():
    with open(FILENAME, 'r') as f:
        return f.read()


@catch_exceptions(True)
def process_new_ip(previous_ip, current_ip):
    if previous_ip == current_ip:
        return
    with open(FILENAME, 'w') as f:
        f.write(current_ip)

    cmd = 'echo {0} | mail -s {1} {2}'.format(current_ip,
                                              SUBJ,
                                              RECEIPIENT)
    print cmd
    os.system(cmd)

if __name__ == "__main__":
    process_new_ip(get_previous_ip(),
                   findall(IP_MASK, urlopen(URL).read())[0])
Δημοσ.

 

Γιατι δεν δοκιμαζεις python αντι για shell script? Θα προτιμουσα κατι τετοιο:

#!/usr/bin/python
URL = "http://ipecho.net/"
IP_MASK = '\d{2,3}.\d{2,3}.\d{2,3}.\d{2,3}'
FILENAME = 'my_external_ip'
RECEIPIENT = "[email protected]"
SUBJ = "ip raspberry"

from urllib import urlopen
from re import findall
import os


def catch_exceptions(show_msg):
    def decorator(foo):
        def wrapper(*args, **kargsv):
            try:
                foo(*args, **kargsv)
            except Exception as e:
                if show_msg:
                    print e
        return wrapper
    return decorator


@catch_exceptions(False)
def get_previous_ip():
    with open(FILENAME, 'r') as f:
        return f.read()


@catch_exceptions(True)
def process_new_ip(previous_ip, current_ip):
    if previous_ip == current_ip:
        return
    with open(FILENAME, 'w') as f:
        f.write(current_ip)

    cmd = 'echo {0} | mail -s {1} {2}'.format(current_ip,
                                              SUBJ,
                                              RECEIPIENT)
    print cmd
    os.system(cmd)

if __name__ == "__main__":
    process_new_ip(get_previous_ip(),
                   findall(IP_MASK, urlopen(URL).read())[0])

δεν το σκεφτηκα για να πω την αληθεια...

 

Τελικα εσβησα το φουλ path και το αφησα ip.txt και φαινετε να λειτορυγει

Δημοσ.

δεν το σκεφτηκα για να πω την αληθεια...

 

Τελικα εσβησα το φουλ path και το αφησα ip.txt και φαινετε να λειτορυγει

Καλά έκανες και δεν το σκέφτηκες, το bash είναι μανούλα σε τέτοια πράγματα  :P

Δημοσ.

Τα περισσοτερα αν οχι ολα τα shell scripts μπορουν να γραφτουν ευκολοτερα και καλυτερα θα ελεγα με την χρηση python η perl...

 

http://stackoverflow.com/questions/2424921/python-vs-bash-in-which-kind-of-tasks-each-one-outruns-the-other-performance-w

Seriously τώρα για 10 γραμμές bash θα προτιμήσεις 46 γραμμές python, ειδικά σε τέτοια εφαρμογή που δεν τίθεται θέμα performance αλλά ταχύτητας και ευκολίας? Λες και το πρόβλημα εδώ είναι το bash αυτό καθεαυτό και έρχεσαι και του προτείνεις python. (Δεν έχω τπτ με την python btw)

Δημοσ.

Nothing wrong με το bash! Υπαρχουν δις γραμμες σε αυτο και κανουν την δουλεια πολυ καλα. Απλα με το python ειναι πιο ευκολο να χειριστεις exceptions, να κανεις code reuse κλπ. Αν ξερεις και τα δυο, νομιζω θα πας με το python...

Δημοσ.

Με Bash κάνω την εξής διαδικασία για να πάρω την εξωτερική IP δοκιμάζοντας ένα από πολλά σχετικά website, αν κάποιο από αυτά με "γειώσει".

until [[ ${ExternalIP} =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]
do
    read c
    ExternalIP=$($c)
done << EOF
curl --silent http://icanhazip.com
curl --silent http://myexternalip.com/raw
curl ifconfig.me/ip
echo 0.0.0.0
EOF
Δημοσ.

DeltaLover, χωρίς ίχνος παρεξήγησης αλλά μόνο τις μετακλάσεις και τα descriptors ξέχασες... :-D. Δηλαδή decorator (με arguments) σε functions για να πιάνουν ή οχι exceptions σε script που στέλνει e-mail;

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...