Dies ist eine mobil optimierte Seite, die schnell lädt. Wenn Sie die Seite ohne Optimierung laden möchten, dann klicken Sie auf diesen Text.

Cronjob zeigt Fehler beim DDNSupdater2.sh

    Nobody is reading this thread right now.
AW: Cronjob zeigt Fehler beim DDNSupdater2.sh

Dann poste doch mal schön in SPOILER und CODE deine Variante von DDNSupdater2.sh
 
AW: Cronjob zeigt Fehler beim DDNSupdater2.sh

Ich weiß zwar jetzt nicht was das bringen soll, schliesslich lässt sie sich ja manuell ausführen, aber bitte schön:

Code:
### CONFIG - START

# Zugangsdaten...
# es koennen mehrere accounts geupdated werden... (rest auskommentieren)

USERNAME["1"]="xxx"          
PASSWORD["1"]="xxx"            
DDNSHOST["1"]="xxx.dyn.com" 

USERNAME["2"]="xxx"          
PASSWORD["2"]="xxx"            
DDNSHOST["2"]="xxx.dyn.com" 

USERNAME["3"]="xxx"          
PASSWORD["3"]="xxx"            
DDNSHOST["3"]="xxx.dyn.com" 

USERNAME["4"]="xxx"          
PASSWORD["4"]="xxx"            
DDNSHOST["4"]="xxx.dyn.com" 

#

# Provider URL's - pro DDNSHOST muss wie oben ein dazu passendes URL["<zahl>"] angelegt werden!
# (beliebig erweiterbar)
#
# $USERNAME , $PASSWORD , $DDNSHOST werden innerhalb der URL mit %USER% , %PASS% , %HOST% angegeben!
#
URL["1"]="http://%USER%:%PASS%@members.dyndns.org/nic/update?hostname=%HOST%"
URL["2"]="http://%USER%:%PASS%@members.dyndns.org/nic/update?hostname=%HOST%"
URL["3"]="http://%USER%:%PASS%@members.dyndns.org/nic/update?hostname=%HOST%"
URL["4"]="http://%USER%:%PASS%@members.dyndns.org/nic/update?hostname=%HOST%"

EVERY="300"        # Zeit in Sekunden zwischen den Abfragen
LOG="1"            # Erstelle Logfile vom update? [0=nein; 1=ja]

# Verschicke EMail bei Problemen? [no=nein; yes=ja]
# ( benoetigt: apt-get install sendEmail )
EMAIL="no"
EMAILFROM="`hostname`@fqdn.net"
EMAILTO='admin@fqdn.net'
EMAILSERVER='mail.fqdn.net'
EMAILUSER=''
EMAILPASS=''


### CONFIG - END

# -------------------------------------------------------------- #
# >>> >> >  DO NOT MESS WiTH ANYTHiNG BELOW THiS LiNE!  < << <<< #
# -------------------------------------------------------------- #


# required system cmd's:
# basename cat cut date echo expr killall ping rm sed sleep wget

Osrcn="DDNSupdater2.sh"
srcn=$(basename $0)
srcv="2.251"
srccfg="config.$Osrcn"
LOGFILE="/var/log/log.$Osrcn"
CHKFILE="/tmp/.$Osrcn"
PiDFILE="/tmp/.pid.$Osrcn"
OnlinePing="google.de"
ProfileSwitchSleep=2
IPCcfgdir="/var/emu/conf"
IPCfunctions="/var/emu/script/functions.sh"
IPCddnssrc="/var/emu/script/$Osrcn"
IPCddnslinkname="ddns"

C="\033[";Ca="${C}0;33m";Cb="${C}1;33m";Cn="${C}0m";ROT="${C}1;31m";GRUEN="${C}1;32m";BOLD="${C}1;37m"
Bo="${C}1m";Bc="${C}21m"; Ro="${C}3m";Rc="${C}23m"; Uo="${C}4m";Uc="${C}24m"
Blo="${C}5m";Blc="${C}25m"; Io="${C}7m";Ic="${C}27m"

## Return Codes
declare -A ReturnCodes
ReturnCodes["Erfolgreich"]="DNS hostname update erfolgreich."
ReturnCodes["Kein Update erforderlich"]="IP address is current, no update performed."
ReturnCodes["Dyn niche vorhanden"]="Hostname supplied does not exist under specified account."
ReturnCodes["falsche Zugangsdaten"]="Invalid username password combination."
ReturnCodes["badagent"]="The user agent was not sent or HTTP method is not permitted (we recommend use of GET request method)."
ReturnCodes["!donator"]="An option available only to credited users (such as offline URL) was specified, but the user is not a credited user."
ReturnCodes["abuse"]="The hostname specified is blocked for update abuse."
ReturnCodes["911"]="A fatal error on our side such as a database outage. Retry the update no sooner 30 minutes."
ReturnCodes["notfqdn"]="The hostname specified is not a fully-qualified domain name (not in the form hostname.dyndns.org or domain.com)."
ReturnCodes["0"]="IP address is current, no update performed."
ReturnCodes["1"]="Update successful."
ReturnCodes["2"]="Hostname supplied does not exist under specified account."
ReturnCodes["3"]="Invalid password."
ReturnCodes["4"]="Invalid username."

function AddonInstalled () {
    [ -f "/var/emu/conf/addons.info" ] && echo "ok" > /tmp/.AddonInstalled_$(basename $0)
}

function remove_addon () {
    #onlinescript als addon entfernen
    if [ -f "/var/emu/conf/addons.info" ]; then
        Anum=$(sed -ne "/^$(basename $0).*/=" /var/emu/conf/addons.info)
        [ ! -z "$Anum" ] && sed -i -e "$Anum d" /var/emu/conf/addons.info
    fi
}

if [ -f "$IPCfunctions" -a ! -f "/sbin/$IPCddnslinkname" ]; then
    echo ".. $srcn v$srcv .."
    echo "Erstbenutzung dieses Scripts? IPC erkannt... kopiere Script $srcn..."
    cp -f $0 $IPCddnssrc ; chmod 755 $IPCddnssrc >/dev/null 2>&1
    echo -e "\nErstelle Symlink fuer ${Ro}$IPCddnslinkname${Rc} auf $IPCddnssrc"
    ln -sf $IPCddnssrc /sbin/$IPCddnslinkname
    echo -e "Nun muss noch der ${Ro}CONFIG${Rc} Abschnitt in dem Script $srcn angepasst werden!"
    sleep 3
    nano -R $IPCddnssrc
    #[ ! -f "$IPCcfgdir/$srccfg" ] && proc_Create_Script_CFG "$IPCcfgdir/$srccfg"
    echo -e "Fertig! Das Script kann kuenftig ueber den Befehl ${Ro}$IPCddnslinkname${Rc} ausgefuehrt werden"
    AddonInstalled
    $IPCddnssrc help
    exit
fi

# load script config?
[ -d "$IPCcfgdir" -a -f "$IPCcfgdir/$srccfg" ] && source $IPCcfgdir/$srccfg
[ ! -d "$IPCcfgdir" -a -f "$srccfg" ] && source $srccfg

# Verschicke EMail..
function send_EMail() {
    MESSAGE=$1
    SUBJECT="$Osrcn"
    if [ $EMAIL = "yes" -o $EMAIL = "1" ]; then
        echo "Verschicke EMail.."
        sendEmail -f $EMAILFROM -t $EMAILTO -u "$SUBJECT" -m "$MESSAGE" -s $EMAILSERVER -xu "$EMAILUSER" -xp "$EMAILPASS"
    fi
}

# Simple URL encoding
function proc_url_encode() {
    out=${1//%/%25}; out=${out//\{/%7B}; out=${out//\}/%7D}; out=${out//|/%7C};
    out=${out//\\/%5C}; out=${out//^/%5E}; out=${out//~/%7E}; out=${out//[/%5B};
    out=${out//]/%5D}; out=${out//\`/%60}; out=${out//#/%23}; out=${out//>/%3E};
    out=${out//\$/%24}; out=${out//&/%26}; out=${out//+/%2B}; out=${out//,/%2C};
    out=${out//\//%2F}; out=${out//:/%3A}; out=${out//;/%3B}; out=${out//=/%3B};
    out=${out//\?/%3F}; out=${out// /%20}; out=${out//</%3C};
    out=${out//\!/%21}; out=${out//\"/%22}; out=${out//\@/%40}; out=${out//\'/%27};
    out=${out//\(/%28}; out=${out//\)/%29}; out=${out//\*/%2A}; out=${out//\-/%2D};
    out=${out//\_/%5F}; out=${out//\./%2E}; out=${out//\Ä/%80};
    echo $out
}

function LOG_msg() {
    message=$1
    if [ $LOG = "1" ]; then
        _DT=$(date +"%d.%m.%Y %H:%M:%S")
        echo "$_DT: $message" >> $LOGFILE
    fi
}

function ReturnCode () {
    for index in ${!ReturnCodes
[*]}; do
        [ "$index" == "$1" ] && echo "${ReturnCodes[$1]}" && break
    done
}

function abuse_check() {
    index=$1
    answer=$(cat ${CHKFILE}_answer_$index)
    MSG=""
    if [ "$answer" = "abuse" ]; then
        MSG="WARNING!! You abused the DNS update function! You must Unlock your hostname: ${DDNSHOST[$index]} !"
    fi
    [ "$answer" = "nohost" ] && MSG="ERROR: Unknown host ${DDNSHOST[$index]} !"
    [ "$answer" = "badauth" ] && MSG="ERROR: Bad auth! Check USERNAME and PASSWORD setting for ${DDNSHOST[$index]} !"
    if [ ! -z "$MSG" ]; then
        echo "$MSG"
        LOG_msg "$MSG"
        send_EMail "$MSG"
    fi
}

function get_IPs() {
    CURRENTIP=""
    # get current internet ip
    CURRENTIP=$(wget -q -O - http://myip.dnsomatic.com)
    if [ -z "$CURRENTIP" -o "$CURRENTIP" = " *" -o "$CURRENTIP" = "*1.0 *" ]; then
        CURRENTIP=$(wget -q -O - http://my.ip.fi)
    fi
    if [ -z "$CURRENTIP" -o "$CURRENTIP" = " *" -o "$CURRENTIP" = "*1.0 *" ]; then
        CURRENTIP=$(wget -q -O - http://www.myip.ch | grep "IP Address" | cut -d ' ' -f4 | sed -e 's/\$//g' -e 's/\\r//g')
    fi
    if [ -z "$CURRENTIP" -o "$CURRENTIP" = " *" -o "$CURRENTIP" = "*1.0 *" ]; then
        CURRENTIP=$(wget -q -O - http://www.ip-lookup.de | grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>')
    fi
    if [ -z "$CURRENTIP" -o "$CURRENTIP" = " *" -o "$CURRENTIP" = "*1.0 *" ]; then
        CURRENTIP=$(wget -q -O - http://checkip.dyndns.org | sed s/[^0-9.]//g)
    fi
    if [ -z "$CURRENTIP" -o "$CURRENTIP" = " *" -o "$CURRENTIP" = "*1.0 *" ]; then
        CURRENTIP=$(wget -q -O - http://checkip.two-dns.de | grep "IP Address" | cut -d ' ' -f4 | sed -e 's/\$//g' -e 's/\\r//g')
    fi
    if [ -z "$CURRENTIP" ]; then
        eRROR["0"]="Cant get current internet ip"
    else
        # get current dyndns ip
        for index in ${!DDNSHOST
[*]}; do
            #DYNIP[$index]=$(nslookup ${DDNSHOST[$index]} | tail -n2 | grep A | sed s/[^0-9.]//g)
            DYNIP[$index]=$(ping -c1 "${DDNSHOST[$index]}" | sed -n 1p | sed -e 's/(//g' -e 's/)//g' | cut -d " " -f3 | sed -e 's/\://g')
            [ -z "${DYNIP[$index]}" ] && eRROR[$index]="Cant get IP of DDNSHOST: ${DDNSHOST[$index]}"
        done
    fi
}

# answer return codes: 1=ip.updated ; 3=wrong.pwd ; 4=wrong.username
function do_update() {
    index=$1
    # Replace %USER% , %PASS% , %HOST%
    URL=${URL[$index]}
    URL=${URL//%USER%/`proc_url_encode "${USERNAME[$index]}"`}
    URL=${URL//%PASS%/`proc_url_encode "${PASSWORD[$index]}"`}
    URL=${URL//%HOST%/${DDNSHOST[$index]}}
    wget -q -O ${CHKFILE}_answer_$index $URL
    answer=$(cat ${CHKFILE}_answer_$index)
    echo "DDNSHOST: ${DDNSHOST[$index]} - DYNIP: ${DYNIP[$index]} - CURRENTIP: $CURRENTIP - answer: $answer"
    LOG_msg "DDNSHOST: ${DDNSHOST[$index]} - DYNIP: ${DYNIP[$index]} - CURRENTIP: $CURRENTIP - answer: $answer"
}

# fuer jedes "profil" (DDNSHOST) die jeweilige "action" abarbeiten (function-names)
function check_profils() {
    ACTION=$1
    eRROR=""
    get_IPs
    for index in ${!DDNSHOST
[*]}; do
        if [ -z "$eRROR" ]; then
            # for each $ACTION...
            if [ ! -z "$ACTION" ]; then
                for actionfunction in $ACTION; do
                    $actionfunction "$index"
                done
            fi
        fi
        sleep $ProfileSwitchSleep
    done
    [ ! -z "$eRROR" ] && for Eidx in ${!eRROR
[*]}; do echo "${eRROR[$Eidx]}"; done
}

function update_interval() {
    PiDs="$$ $!"
    echo $PiDs > $PiDFILE
    echo "Running Script in Background with PID(s): $PiDs"
    while true; do
        [ ! -f "$PiDFILE" ] && echo "$srcn: Interval stopped" && break
        # check if online...
        ONLINE=0
        [ "$(ping -c1 "$OnlinePing" | grep -c "seq")" -eq 1 ] && ONLINE=1
        # if online, check each DDNSHOST (array)...
        if [ "$ONLINE" ]; then
            get_IPs
            for index in ${!DDNSHOST
[*]}; do
                [ "${DYNIP[$index]}" != "$CURRENTIP" ] && do_update "$index" && abuse_check "$index"
            done
        fi
        if [ ! -z "$eRROR" ]; then
            Error=""
            for Eidx in ${!eRROR
[*]}; do
                Error="$Error ${eRROR[$Eidx]}\n"
            done
            echo -e "$Error" && LOG_msg "$Error" && send_EMail "$Error"
            eRROR=""
        fi
        sleep $EVERY
    done
}

function show_status() {
    get_IPs
    for index in ${!DDNSHOST
[*]}; do
        if [ "${DYNIP[$index]}" != "$CURRENTIP" ]; then
            echo "The IP of ${DDNSHOST[$index]} (${DYNIP[$index]}) does NOT match your current Internet-IP: $CURRENTIP"
            echo "You should update immediately! (with: $0 now)"
        else
            echo "Your host ${DDNSHOST[$index]} with IP ${DYNIP[$index]} is still up to date: $CURRENTIP"
            if [ -f "${CHKFILE}_answer_$index" ]; then
                answer=$(cat ${CHKFILE}_answer_$index)
                echo -e "Last Answer was: $answer \t $(ReturnCode "$(echo $answer|sed -e s/.*://)")"
            fi
        fi
        echo " "
    done
    [ -f "$PiDFILE" ] && echo "Script seems to run in background with PID(s): $(cat $PiDFILE)"
}

function kill_script() {
    counter="5"
    [ -f "$PiDFILE" ] && PID=$(cat $PiDFILE)
    #[ -z "$PID" ] && PID="$$ $!"
    if [ ! -z "$PID" ]; then
        echo "PID(s): $PID"
        echo -n "Stopping Script"
        if ( kill -TERM $PID 2> /dev/null ); then
            c=1
            while [ "$c" -le 300 ]; do
                if ( kill -0 $PID 2> /dev/null ); then
                    echo -n "."
                    sleep 1
                else
                    break
                fi
                c=$((++c))
            done
        fi
        if ( kill -0 $PID 2> /dev/null ); then
            echo -e "\rScript is not shutting down cleanly - killing"
            kill -KILL $PID
        else
            echo " done"
        fi
        #for P in $PID; do
        #    kill -9 $P >/dev/null 2>&1
        #    echo "Killed PID $P"
        #done
        killall -9 $IPCddnslinkname $srcn >/dev/null 2>&1
    else
        echo "Nothing to $1!"
    fi
    rm -f $PiDFILE
}

function echo_PIDs() {
    [ -f "$PiDFILE" ] && PID=$(cat $PiDFILE)
    [ -z "$PID" ] && PID="$$ $!"
    if [ -z "$PID" ]; then
        echo "Seems script isnt running in background"
    else
        echo "Scripts currently ProcessIDs: $PID"
    fi
}


if [ -f "$IPCfunctions" -a -f "$IPCddnssrc" ]; then
    linkname=$IPCddnslinkname
else
    linkname=$0
fi

case "$1" in
    "")
        update_interval &
    ;;
    [aA][uU][tT][oO]|[sS][tT][aA][rR][tT])
        bash $0 & >/dev/null 2>&1
    ;;
    [kK][iI][lL][lL]|[sS][tT][oO][pP])
        kill_script $1
    ;;
    [nN][oO][wW])
        check_profils "do_update abuse_check"
    ;;
    [pP][iI][dD]*)
        echo_PIDs
    ;;
    [sS][tT][aA][tT][uU][sS])
        show_status
    ;;
    [hH][eE][lL][pP]|[hH][iI][lL][fF][eE]|?)
        echo "Usage: $linkname [now|auto|kill|status|pid|help]"
        echo "$linkname now -> Force to update DDNSHOST immediately (erzwinge sofortiges updaten von DDNSHOST)"
        echo "$linkname auto -> Checks/updates DDNSHOST every $EVERY seconds (Ueberprueft/updated DDNSHOST alle $EVERY Sekunden)"
        echo "$linkname kill -> Kills running script (Script wird beendet)"
        echo "$linkname status -> Show current DDNSHOSTs status (Zeigt den aktuellen Status, ob ein update noetig ist)"
        echo "$linkname pid -> Show Process IDs (Zeigt die verwendeten ProzessIDs dieses Scripts)"
        echo "$linkname deinstall -> Deinstalls Script (Deinstalliert das Script)"
        echo "$linkname help -> This help... (Zeigt diese Hilfe...)"
    ;;
    [dD][eE][iI][nN][sS]*)
        kill_script $1
        rm -f $IPCddnssrc /sbin/$IPCddnslinkname
        remove_addon
        echo "Script deinstalled!"
    ;;
    *)
        echo "Usage: $linkname [now|auto|kill|status|pid|help]"
    ;;
esac

exit 0
 
AW: Cronjob zeigt Fehler beim DDNSupdater2.sh

Also, bei mir fängt das DDNSupdater2.sh skript anders an,..... aber du fragst ja, was es soll,.....

Code:
[COLOR=#ff0000]#!/bin/bash[/COLOR]
#
# DynamicDNSupdater - supports: DynDNS.org, NO-IP.com, DYNServ.ca and IPActive.de
#
# Es koennen auch verschiedene Dienste genutzt werden um mehrere DNS-Hosts zu nutzen...

Das rote oben ist wichtig!!!

Wenn du das skript händisch eingibst, benutzt du "bash" also
Code:
bash /var/emu/script/DDNSupdater2.sh auto
deshalb läuft es, wenn es händisch ausgeführt wird, weil der bash-interpreter vorgegeben wird im Befehl

Gruß
jensebub


 
Zuletzt bearbeitet:
AW: Cronjob zeigt Fehler beim DDNSupdater2.sh

Ich dachte immer das ein Raute davor die Zeile "unwirksam" macht.
Aufrufen, also händisch, mache ich mit:

/var/emu/script/DDNSupdater.sh auto (start) geht auch.
Dieses Bash hab ich noch nie benutzt.

Wie dem auch sei, ich hab jetzt mal dieses Bash reingekloppt und einen Reboot gemacht.

Ergebnis: Gleiches Problem wie vorher auch.

Kurze Frage: Wieso bedankt ihr euch die ganze Zeit gegenseitig, das Problem ist doch überhaupt noch nicht gelöst. Hilft das euch vielleicht irgendwie?

Nachtrag:
Allerdings ändert sich jedesmal die Nummer in dem Error. Gibt das vielleicht Aufschluss?

(CRON) error (grandchild #986 failed with exit status 126)
 
Zuletzt bearbeitet:
AW: Cronjob zeigt Fehler beim DDNSupdater2.sh

Kurze Frage: Wieso bedankt ihr euch die ganze Zeit gegenseitig, das Problem ist doch überhaupt noch nicht gelöst. Hilft das euch vielleicht irgendwie?

Ganz ehrlich, WEIL ES EIN SINNVOLLER BEITRAG ist.

Aber da du ja alles und jeden in Frage stellst und auch Quellenangaben und edits nicht beachtest, und du eine eigene Linuxwelt zu haben scheinst, inklusive abgeänderter skripte und configs,... bin ich hier einfach mal raus.
Im Normalfall läuft es perfekt, keine Ahnung, was du noch alles nach deinem besten Wissen abgeändert hast.

Gruß
jensebub

/EDIT: hier mal eine Fehlertabelle:
[h=3]Shell Command Exit Status[/h] The return value of a command is its exit status, or 128 + N if the command is terminated by signal N. Exit status is used to check the result (success/failure) of the execution of the command. If the exit status is zero, then the command is success. If the command is failed the exit status will be non-zero.
Exit ValueExit Status
0 (Zero)Success
Non-zeroFailure
2Incorrect usage
127Command Not found
126Not an executable
 
Zuletzt bearbeitet:
AW: Cronjob zeigt Fehler beim DDNSupdater2.sh

Hey Jensebub, ich meine das keineswegs böse. Natürlich lese ich deine Hinweise und Links, ich bin dir auch dankbar.
Das ich Quellenangaben nicht beachte etc stimmt überhaupt nicht, ich lese schon den ganzen Tag wie verrückt. Auch glaube ich kaum das ich "Alles" und "Jeden" in Frage stelle, ich bin euren Wünschen jedesmal nachgekommen.

Wenn das so rüber gekommen ist dann tut es mir leid, das war überhaupt nicht mein Anliegen. Auch ändere ich hier nicht irgendwelche Configs, zumal mein Wissen bez. IPC lange nicht so ausgeprägt ist wie deins.

OK, wenn du mir nicht helfen kannst oder es nicht mehr willst, dann muss ich das so akzeptieren. Schade, aber ich kanns nicht ändern.

DANKE trotzdem für deine bisherige Hilfe
 
Für die Nutzung dieser Website sind Cookies erforderlich. Du musst diese akzeptieren, um die Website weiter nutzen zu können. Erfahre mehr…