Shellskript - Fehler in Cron

Diskutiere Shellskript - Fehler in Cron im Shell-Skripte Forum im Bereich Programmieren unter Linux/Unix; Hallo Leute, ich habe das komische Problem, dass eines meiner Shellskripte nicht funktioniert, wenn es als Cronjob ausgeführt wird: #! /bin/bash...

  1. #1 Gast123, 24.07.2013
    Zuletzt von einem Moderator bearbeitet: 24.07.2013
    Gast123

    Gast123 Guest

    Hallo Leute,

    ich habe das komische Problem, dass eines meiner Shellskripte nicht funktioniert, wenn es als Cronjob ausgeführt wird:
    Code:
    #! /bin/bash
    
    HDDTEMP=/usr/sbin/hddtemp
    MIN_TEMP_THRESH=0
    MAX_TEMP_THRESH=60
    
    VERBOSE=false
    RETVAL=0
    
    USAGE="Usage: `basename $0` { ARGS.. }
    ARGS: 
    	-min, --min-temp	VAL	Set Minimum temperature threshold to VAL °C
    	-max, --max-temp	VAL	Set Maximum temperature threshold to VAL °C
    	 -v, --verbose			Print verbose information
    (C) 2012 Richard Neumann"
    
    eval_disk_temp() {
    	local DISK_TEMP="$1"
            local DISK_TEMP_VAL=$(echo "$DISK_TEMP" | /bin/cut -d "°" -f 1)
    
    	if [ $DISK_TEMP_VAL -le $MIN_TEMP_THRESH ]; then
    		echo -e "\e[1;34m$DISK_TEMP\e[00m"
    		return 1
    	elif [ $DISK_TEMP_VAL -ge $MAX_TEMP_THRESH ]; then
    		echo -e "\e[0;31m$DISK_TEMP\e[00m"
    		return 2
    	else
    		echo -e "$DISK_TEMP"
    		return 0
    	fi
    }
    
    measure_disks() {
    	for DISK in /dev/sd?; do
    		HDDTEMP_REPLY="`$HDDTEMP $DISK`"
    		DISK_DEV="`echo $HDDTEMP_REPLY | cut -d ":" -f 1`"
    		DISK_NAME="`echo $HDDTEMP_REPLY | cut -d ":" -f 2`"
    		DISK_TEMP="`echo $HDDTEMP_REPLY | cut -d ":" -f 3`"
    
    		echo -en "Disk: $DISK_DEV"
    		if ($VERBOSE); then
    			echo -en "\n\t$DISK_NAME\n\t"
    			eval_disk_temp $DISK_TEMP
    			RETVAL=$(($RETVAL+$?))
    		else
    			echo -en "\t\t\t"
    			eval_disk_temp $DISK_TEMP
            	        RETVAL=$(($RETVAL+$?))
    		fi
    	done
    	return $RETVAL
    }
    	
    while (( $# )); do
    	case $1 in
    		-v|--verbose)		VERBOSE=true
    		;;
    		-min|--min-temp)	MIN_TEMP_THRESH=$2
    					shift
    		;;	
    		-max|--max-temp)	MAX_TEMP_THRESH=$2
    					shift
    		;;	
    		-h|--help)		echo -e "$USAGE"
    					exit 0
    		;;
    		*)			echo -e "ERROR:\tUnknown command '$1'" 1>&2
    					exit -1
    	esac
    	shift
    done
    
    measure_disks
    
    Wenn ich es in einer Konsole ausführe, tut es was es soll.
    Leider nicht, wenn es durch root's Crontab ausgeführt wird.
    Dann erhalte ich eine Systemmail mit dem Inhalt:
    Code:
    From root@weinheim.localdomain  Wed Jul 24 11:41:02 2013
    Return-Path: <root@weinheim.localdomain>
    X-Original-To: root
    Delivered-To: root@weinheim.localdomain
    Received: by weinheim.localdomain (Postfix, from userid 0)
            id 74B9FD60900; Wed, 24 Jul 2013 11:41:02 +0200 (CEST)
    From: root@weinheim.localdomain (Cron Daemon)
    To: root@weinheim.localdomain
    Subject: Cron <root@weinheim> /usr/local/sbin/disktemps > /etc/disktemps
    Content-Type: text/plain; charset=UTF-8
    Auto-Submitted: auto-generated
    X-Cron-Env: <SHELL=/bin/sh>
    X-Cron-Env: <HOME=/root>
    X-Cron-Env: <PATH=/usr/bin:/bin>
    X-Cron-Env: <LOGNAME=root>
    X-Cron-Env: <USER=root>
    Message-Id: <20130724094102.74B9FD60900@weinheim.localdomain>
    Date: Wed, 24 Jul 2013 11:41:01 +0200 (CEST)
    
    /bin/cut: the delimiter must be a single character
    Try `/bin/cut --help' for more information.
    /usr/local/sbin/disktemps: line 21: [: -le: unary operator expected
    /usr/local/sbin/disktemps: line 24: [: -ge: unary operator expected
    /bin/cut: the delimiter must be a single character
    Try `/bin/cut --help' for more information.
    /usr/local/sbin/disktemps: line 21: [: -le: unary operator expected
    /usr/local/sbin/disktemps: line 24: [: -ge: unary operator expected
    /bin/cut: the delimiter must be a single character
    Try `/bin/cut --help' for more information.
    /usr/local/sbin/disktemps: line 21: [: -le: unary operator expected
    /usr/local/sbin/disktemps: line 24: [: -ge: unary operator expected
    
    Ich kann das überhaupt nicht nachvollziehen.

    MfG

    Schard

    PS: Es geht nachdem ich das
    Code:
    /bin/cut -d "°" -f 1
    durch
    Code:
    awk -F'°' '{print $1}'
    ersetzt habe.
    Ich würde trotzdem gerne verstehen, warum cut in der Konsole functioniert, nicht aber in Cron.

    PPS: Aha. Wenn das Skript übder die Crontab ausgeführt wird, wird der Charakter "°" nicht dargestellt. Warum auch immer.
    Ich hab
    Code:
    /bin/cut -d "°" -f 1
    jetzt durch
    Code:
     grep -oE '[0-9]*[0-9]'
    ersetzt. das geht nun in beiden Fällen.
    Komische Sache...
     
  2. #2 Spröde, 24.07.2013
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    175
    Zustimmungen:
    0
    Scheint ein Kodierungsproblem zu sein. Du kannst es ja mal Oktal probieren:
    Code:
    ~> echo -e \\0302\\0260
    °
    Ach ja: Die Bash kann auch selber cutten:
    Code:
    ~> Test=12°34
    ~> echo ${Test//°*}
    12
     
  3. #3 floyd62, 24.07.2013
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    315
    Zustimmungen:
    0
    Hi,

    ich nehme an, du verwendest in der Shell UTF-8, und dein Skript ist dann ebenfalls mit UTF-8-Codierung abgespeichert. In der Cron-Umgebung wird, sofern nicht explizit gesetzt, wahrscheinlich Standard (LANG=C) benutzt. Wenn du am Anfang deines Skripts also ein
    Code:
    LANG=en_US.UTF-8 export LANG
    einfügst, sollte das auch laufen. (Mit LANG=C interpretiert "cut" das "°" nicht als ein einzelnes, sondern als 2 Zeichen, oktal \0302 und \0260.)

    Gruss, A.
     
Thema:

Shellskript - Fehler in Cron

Die Seite wird geladen...

Shellskript - Fehler in Cron - Ähnliche Themen

  1. Wie einen Pfad zur Vereinfachung mittels Shellskript wechseln

    Wie einen Pfad zur Vereinfachung mittels Shellskript wechseln: Ich muß häufiger in 2 bestimmte Verzeichnisse auf 3. oder 4. Ebene wechseln. Um nicht permanent cd /ordnerA/ordnerB/ordnerC... usw eingeben zu...
  2. Shellskript per PHP aufrufen funktioniert nicht

    Shellskript per PHP aufrufen funktioniert nicht: Hallo zusammen, ihr seid meine letze Hoffnung, seit heute morgen versuche ich ein shellskript zum laufen zu bekommen. Folgende...
  3. Problem bei Shellskript

    Problem bei Shellskript: Hey Leute, ich soll ein Shellskript schreiben welches einen Verzeichnis, welches ich als Paramter angebe, rekursiv nach der Textdatei mit den...
  4. Reengineering Shellskripte

    Reengineering Shellskripte: Hallo Community, ich habe ein Problem wo ich leider keine Lösung finde. Es gibt eine Liste von Shell-skripten die in unterschiedlichen...
  5. Servicemenu ruft Shellskript nicht auf

    Servicemenu ruft Shellskript nicht auf: Hallo zusammen, ich habe gerade ein Shellskript gebastelt das Bilder verkleinert und in einen neuen Ordner packt. Per Konsole funktioniert es...