#!/usr/bin/perl use strict; use Errno; # 3740 files, 3739 max index my @files = glob("/usr/bin/*"); my $range = $#files; #scalar(@files)-1; while (1) { my $random = int(rand($range)); my $filename = $files[$random]; my $buffer; print STDERR "Checking $filename - ( $random / $range )\n"; #my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($filename); open(FILE, "< $filename") or next; my $retval = sysread(FILE, $buffer, 8192); if (!defined $retval) { if ($!{EIO}) { print STDERR "I/O Error on $filename. Resetting.\n"; #system("/var/tmpfs/reboot -nf"); -- MUST BE IN MEMORY FS AND STATICALLY LINKED. system calls /bin/sh but should be cached in memory #exec {'/var/tmpfs/reboot'} '-nf'; -- MUST BE IN MEMORY FS AND STATICALLY LINKED } } close(FILE); sleep(15); }