[rrd-users] RRDTool graph not updating with crontab

Steve Sykes steve at ecsykes.com
Tue Feb 28 00:27:39 CET 2012

I have installed OWFS and RRDTool on my NSLU2 which is running Debian.

I am using the attached script to gather the temperatures and save them to

If I run the script from the command line as both a user or root, the graph
updates correctly.

If it runs from the system crontab, it does not update the data, although
the graph file time agrees with the cron job.  The data shows in the log
file that I am piping from the cron job.

I thought that this was either a permissions or path problem but I have
investigated very carefully and cannot see an issue with either.  Has anyone
had this happen? If so please steer me in the direction to correct it.
Steve Sykes

# copyright Martin Pot 2006-2009
# http://martybugs.net/electronics/tempsensor/
# rrd_tempsensors.pl

use RRDs;

# define location of rrdtool databases
my $rrd = '/var/lib/rrd';
# define location of images
my $img = '/var/www/rrdtool';

# process data for each interface (add/delete as required)
&ProcessSensor(0, "sensor 1");
&ProcessSensor(1, "sensor 2");
&ProcessSensor(2, "sensor 3");

sub ProcessSensor
# process sensor
# inputs: $_[0]: sensor number (ie, 0/1/2/etc)
#	  $_[1]: sensor description 

	# get temperature from sensor
	#my $temp = `/usr/bin/digitemp -t $_[0] -q -c /etc/digitemp.conf -o%C`;
        my $temp = `cat /mnt/1wire/28.DDAB6B020000/temperature |
/usr/bin/awk '{print $1}'`; 

	# remove eol chars

	print "sensor $_[0]: $temp degrees C ($_[1])\n";

	# if rrdtool database doesn't exist, create it
	if (! -e "$rrd/temp$_[0].rrd")
		print "creating rrd database for temp sensor $_[0]...\n";
		RRDs::create "$rrd/temp$_[0].rrd",
			"-s 60",
	if ($ERROR = RRDs::error) { print "$0: failed to create $_[0] database
file: $ERROR\n"; }

	# check for error code from temp sensor
	if (int $temp eq 85)
		print "failed to read value from sensor $_[0]\n";
		$temp = "U";
	# insert values into rrd
	RRDs::update "$rrd/temp$_[0].rrd",
		"-t", "temp",
	if ($ERROR = RRDs::error) { print "$0: failed to insert $_[0] data into
rrd: $ERROR\n"; }

&CreateGraph($_[0], "day", $_[1]);
&CreateGraph($_[0], "week", $_[1]);
&CreateGraph($_[0], "month", $_[1]);
&CreateGraph($_[0], "year", $_[1]);

sub CreateGraph
# creates graph
# inputs: $_[0]: n/a
#         $_[1]: interval (ie, day, week, month, year)
#         $_[2]: graph description

        RRDs::graph "$img/temps-$_[1].png",
                "-s -1$_[1]",
                "-t DS18S20 temperature sensors :: last $_[1] (1 minute
                "-h", "200", "-w", "800",
		"-l", "0",
                "-a", "PNG",
                "-v degrees Celsius",
		"--color", "SHADEA#ffffff",
		"--color", "SHADEB#ffffff",
		"--color", "BACK#ffffff",
		"--color", "CANVAS#ffffff",
		"LINE2:temp0#33CC00:sensor 1\\:         ",
		"GPRINT:temp0:MIN:    Min\\: %5.2lf",
		"GPRINT:temp0:MAX:   Max\\: %5.2lf",
		"GPRINT:temp0:AVERAGE:   Average\\: %5.2lf",
		"GPRINT:temp0:LAST:   Current\\: %5.2lf degrees Celsius\\n",
		"LINE2:temp1#990000:sensor 2\\:         ",
		"GPRINT:temp1:MIN:    Min\\: %5.2lf",
		"GPRINT:temp1:MAX:   Max\\: %5.2lf",
		"GPRINT:temp1:AVERAGE:   Average\\: %5.2lf",
		"GPRINT:temp1:LAST:   Current\\: %5.2lf degrees Celsius\\n",
		"LINE2:temp2#00FF00:sensor 3\\:         ",
		"GPRINT:temp2:MIN:    Min\\: %5.2lf",
		"GPRINT:temp2:MAX:   Max\\: %5.2lf",
		"GPRINT:temp2:AVERAGE:   Average\\: %5.2lf",
		"GPRINT:temp2:LAST:   Current\\: %5.2lf degrees Celsius\\n";
        if ($ERROR = RRDs::error) { print "$0: unable to generate sensor
$_[0] $_[1] graph: $ERROR\n"; }

View this message in context: http://old.nabble.com/RRDTool-graph-not-updating-with-crontab-tp33403549p33403549.html
Sent from the RRDTool - User mailing list archive at Nabble.com.

More information about the rrd-users mailing list