nikos134 Δημοσ. 4 Μαρτίου 2014 Δημοσ. 4 Μαρτίου 2014 Εχω γράψει αυτο: #!/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...
javavall Δημοσ. 4 Μαρτίου 2014 Δημοσ. 4 Μαρτίου 2014 άκυρο το πρώτο.. Για δες τι επιστρέφει η wget. Μήπως έχει κανένα newline?
nikos134 Δημοσ. 4 Μαρτίου 2014 Μέλος Δημοσ. 4 Μαρτίου 2014 Μήπως είναι αυτό? if [ "$ip1" == "$ip2" ] ; then Μήπως είναι αυτό? if [ "$ip1" == "$ip2" ] ; then το δοκιμασα πεταει compilier error
gon1332 Δημοσ. 4 Μαρτίου 2014 Δημοσ. 4 Μαρτίου 2014 άκυρο Δε χρειαζόταν να το σβήσεις. Πρόσθεσε κάποιο edit από κάτω.
nikos134 Δημοσ. 4 Μαρτίου 2014 Μέλος Δημοσ. 4 Μαρτίου 2014 άκυρο το πρώτο..το πέρασα για ints.. Για δες τι επιστρέφει η wget. Μήπως έχει κανένα newline? οταν την τρεχεις εκτος σκριπτ σου επιστρεφει κανονικα την ιπ...και στο τεχτ η ιπ υπαρχει....
javavall Δημοσ. 4 Μαρτίου 2014 Δημοσ. 4 Μαρτίου 2014 Δε χρειαζόταν να το σβήσεις. Πρόσθεσε κάποιο edit από κάτω. Θα έπρεπε ναι. Αλλά ντράπηκα, καθώς απάντησα βιαστικά έχοντας μια άλλη περίπτωση στο μυαλό.
javavall Δημοσ. 4 Μαρτίου 2014 Δημοσ. 4 Μαρτίου 2014 Σε μένα που δοκιμάζω τρέχει ο κώδικάς σου όπως αναμένεται. Για δοκίμασε με την curl ip2=$(curl ifconfig.me/ip) ps: Μήπως δεν έχεις δικαίωμα write στο "/media/usb0/Downloads/ip.txt", οπότε εάν πχ αρχικά δεν έχεις κάτι στο ip.txt να μην ανανεώνεται και να χτυπάει συνέχεια στο else.
DeltaLover Δημοσ. 4 Μαρτίου 2014 Δημοσ. 4 Μαρτίου 2014 Γιατι δεν δοκιμαζεις 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])
nikos134 Δημοσ. 4 Μαρτίου 2014 Μέλος Δημοσ. 4 Μαρτίου 2014 Γιατι δεν δοκιμαζεις 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 και φαινετε να λειτορυγει
javavall Δημοσ. 4 Μαρτίου 2014 Δημοσ. 4 Μαρτίου 2014 δεν το σκεφτηκα για να πω την αληθεια... Τελικα εσβησα το φουλ path και το αφησα ip.txt και φαινετε να λειτορυγει Καλά έκανες και δεν το σκέφτηκες, το bash είναι μανούλα σε τέτοια πράγματα
DeltaLover Δημοσ. 4 Μαρτίου 2014 Δημοσ. 4 Μαρτίου 2014 δεν το σκεφτηκα για να πω την αληθεια... Τα περισσοτερα αν οχι ολα τα shell scripts μπορουν να γραφτουν ευκολοτερα και καλυτερα θα ελεγα με την χρηση python η perl... δες και εδω σχετικη συζητηση..
javavall Δημοσ. 4 Μαρτίου 2014 Δημοσ. 4 Μαρτίου 2014 Τα περισσοτερα αν οχι ολα τα 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)
DeltaLover Δημοσ. 4 Μαρτίου 2014 Δημοσ. 4 Μαρτίου 2014 Nothing wrong με το bash! Υπαρχουν δις γραμμες σε αυτο και κανουν την δουλεια πολυ καλα. Απλα με το python ειναι πιο ευκολο να χειριστεις exceptions, να κανεις code reuse κλπ. Αν ξερεις και τα δυο, νομιζω θα πας με το python...
nikolaos_ Δημοσ. 7 Μαρτίου 2014 Δημοσ. 7 Μαρτίου 2014 Με 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
iceblade Δημοσ. 7 Μαρτίου 2014 Δημοσ. 7 Μαρτίου 2014 DeltaLover, χωρίς ίχνος παρεξήγησης αλλά μόνο τις μετακλάσεις και τα descriptors ξέχασες... . Δηλαδή decorator (με arguments) σε functions για να πιάνουν ή οχι exceptions σε script που στέλνει e-mail;
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα