Linux vps-61133.fhnet.fr 4.9.0-19-amd64 #1 SMP Debian 4.9.320-2 (2022-06-30) x86_64
Apache/2.4.25 (Debian)
Server IP : 93.113.207.21 & Your IP : 216.73.216.41
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
share /
logwatch /
scripts /
services /
Delete
Unzip
Name
Size
Permission
Date
Action
afpd
3.84
KB
-rwxr-xr-x
2017-01-21 17:44
amavis
176.48
KB
-rwxr-xr-x
2017-01-21 17:44
arpwatch
1.43
KB
-rwxr-xr-x
2017-01-21 17:44
audit
15.59
KB
-rwxr-xr-x
2017-01-21 17:44
automount
5.24
KB
-rwxr-xr-x
2017-01-21 17:44
autorpm
2.25
KB
-rwxr-xr-x
2017-01-21 17:44
barracuda
11.85
KB
-rwxr-xr-x
2017-01-21 17:44
bfd
2.2
KB
-rwxr-xr-x
2017-01-21 17:44
cisco
44.38
KB
-rwxr-xr-x
2016-07-26 19:43
citadel
58.58
KB
-rwxr-xr-x
2017-01-21 17:44
clam-update
6.93
KB
-rwxr-xr-x
2017-01-21 17:44
clamav
6.17
KB
-rwxr-xr-x
2017-01-21 17:44
clamav-milter
4.17
KB
-rwxr-xr-x
2017-01-21 17:44
courier
23.28
KB
-rwxr-xr-x
2017-01-21 17:44
cron
12.58
KB
-rwxr-xr-x
2017-01-21 17:44
denyhosts
1.75
KB
-rwxr-xr-x
2017-01-21 17:44
dhcpd
11
KB
-rwxr-xr-x
2017-01-21 17:44
dirsrv
4.85
KB
-rwxr-xr-x
2017-01-21 17:44
dnssec
4.99
KB
-rwxr-xr-x
2017-01-21 17:44
dovecot
24.72
KB
-rwxr-xr-x
2017-01-21 17:44
dpkg
3.21
KB
-rwxr-xr-x
2017-01-21 17:44
emerge
4.44
KB
-rwxr-xr-x
2017-01-21 17:44
evtapplication
5.92
KB
-rwxr-xr-x
2017-01-21 17:44
evtsecurity
12.7
KB
-rwxr-xr-x
2017-01-21 17:44
evtsystem
14.95
KB
-rwxr-xr-x
2017-01-21 17:44
exim
24.79
KB
-rwxr-xr-x
2017-01-21 17:44
eximstats
1.91
KB
-rwxr-xr-x
2017-01-21 17:44
extreme-networks
10.91
KB
-rwxr-xr-x
2017-01-21 17:44
fail2ban
9.98
KB
-rwxr-xr-x
2017-01-21 17:44
fetchmail
3.53
KB
-rwxr-xr-x
2017-01-21 17:44
freeradius
10.22
KB
-rwxr-xr-x
2017-01-21 17:44
ftpd-messages
7.67
KB
-rwxr-xr-x
2017-01-21 17:44
ftpd-xferlog
6.18
KB
-rwxr-xr-x
2017-01-21 17:44
http
23.73
KB
-rwxr-xr-x
2017-01-21 17:44
http-error
4.22
KB
-rwxr-xr-x
2016-07-26 19:43
identd
5.54
KB
-rwxr-xr-x
2017-01-21 17:44
imapd
11.15
KB
-rwxr-xr-x
2017-01-21 17:44
in.qpopper
4.84
KB
-rwxr-xr-x
2017-01-21 17:44
init
3.48
KB
-rwxr-xr-x
2017-01-21 17:44
ipop3d
4.08
KB
-rwxr-xr-x
2017-01-21 17:44
iptables
14.96
KB
-rwxr-xr-x
2017-01-21 17:44
kernel
10.56
KB
-rwxr-xr-x
2017-01-21 17:44
knockd
2.8
KB
-rwxr-xr-x
2017-01-21 17:44
lvm
3.12
KB
-rwxr-xr-x
2017-01-21 17:44
mailscanner
27.15
KB
-rwxr-xr-x
2017-01-21 17:44
mdadm
4.58
KB
-rwxr-xr-x
2017-01-21 17:44
mod_security2
7.82
KB
-rwxr-xr-x
2017-01-21 17:44
modprobe
4.17
KB
-rwxr-xr-x
2017-01-21 17:44
mountd
4.35
KB
-rwxr-xr-x
2017-01-21 17:44
mysql
4.52
KB
-rwxr-xr-x
2017-01-21 17:44
mysql-mmm
4.84
KB
-rwxr-xr-x
2017-01-21 17:44
named
31.26
KB
-rwxr-xr-x
2017-01-21 17:44
netopia
14.98
KB
-rwxr-xr-x
2017-01-21 17:44
netscreen
20.63
KB
-rwxr-xr-x
2017-01-21 17:44
oidentd
5.47
KB
-rwxr-xr-x
2017-01-21 17:44
omsa
2.59
KB
-rwxr-xr-x
2017-01-21 17:44
openvpn
13.68
KB
-rwxr-xr-x
2017-01-21 17:44
pam
1.86
KB
-rwxr-xr-x
2017-01-21 17:44
pam_pwdb
7.84
KB
-rwxr-xr-x
2017-01-21 17:44
pam_unix
16.03
KB
-rwxr-xr-x
2017-01-21 17:44
php
5.1
KB
-rwxr-xr-x
2017-01-21 17:44
pix
13.29
KB
-rwxr-xr-x
2017-01-21 17:44
pluto
11.97
KB
-rwxr-xr-x
2017-01-21 17:44
pop3
15.18
KB
-rwxr-xr-x
2017-01-21 17:44
portsentry
5
KB
-rwxr-xr-x
2017-01-21 17:44
postfix
241.59
KB
-rwxr-xr-x
2017-01-21 17:44
postgresql
5.39
KB
-rwxr-xr-x
2017-01-21 17:44
pound
3.52
KB
-rwxr-xr-x
2017-01-21 17:44
proftpd-messages
10.6
KB
-rwxr-xr-x
2017-01-21 17:44
puppet
10.37
KB
-rwxr-xr-x
2016-07-26 19:43
pureftpd
8.17
KB
-rwxr-xr-x
2017-01-21 17:44
qmail
5.73
KB
-rwxr-xr-x
2017-01-21 17:44
qmail-pop3d
4.43
KB
-rwxr-xr-x
2017-01-21 17:44
qmail-pop3ds
3.98
KB
-rwxr-xr-x
2017-01-21 17:44
qmail-send
19.63
KB
-rwxr-xr-x
2017-01-21 17:44
qmail-smtpd
56.05
KB
-rwxr-xr-x
2017-01-21 17:44
raid
1.73
KB
-rwxr-xr-x
2017-01-21 17:44
resolver
3.43
KB
-rwxr-xr-x
2017-01-21 17:44
rsnapshot
3.33
KB
-rwxr-xr-x
2017-01-21 17:44
rsyslogd
1.79
KB
-rwxr-xr-x
2016-07-26 19:43
rt314
4.43
KB
-rwxr-xr-x
2017-01-21 17:44
samba
25.63
KB
-rwxr-xr-x
2017-01-21 17:44
saslauthd
4.06
KB
-rwxr-xr-x
2017-01-21 17:44
scsi
3.34
KB
-rwxr-xr-x
2017-01-21 17:44
secure
41.04
KB
-rwxr-xr-x
2017-01-21 17:44
sendmail
92.27
KB
-rwxr-xr-x
2017-01-21 17:44
sendmail-largeboxes
2.51
KB
-rwxr-xr-x
2017-01-21 17:44
shaperd
5.64
KB
-rwxr-xr-x
2017-01-21 17:44
slon
4.61
KB
-rwxr-xr-x
2017-01-21 17:44
smartd
16.1
KB
-rwxr-xr-x
2017-01-21 17:44
sonicwall
25
KB
-rwxr-xr-x
2017-01-21 17:44
spamassassin
7.56
KB
-rwxr-xr-x
2016-07-26 19:43
sshd
30.98
KB
-rwxr-xr-x
2017-01-21 17:44
sshd2
2.02
KB
-rwxr-xr-x
2017-01-21 17:44
sssd
2.45
KB
-rwxr-xr-x
2017-01-21 17:44
stunnel
5.61
KB
-rwxr-xr-x
2016-07-26 19:43
sudo
6.01
KB
-rwxr-xr-x
2017-01-21 17:44
syslog-ng
20.61
KB
-rwxr-xr-x
2017-01-21 17:44
syslogd
1.98
KB
-rwxr-xr-x
2017-01-21 17:44
systemd
7.53
KB
-rwxr-xr-x
2017-01-21 17:44
tac_acc
4.12
KB
-rwxr-xr-x
2017-01-21 17:44
tivoli-smc
4.41
KB
-rwxr-xr-x
2016-07-26 19:43
up2date
4.79
KB
-rwxr-xr-x
2017-01-21 17:44
vdr
8.3
KB
-rwxr-xr-x
2017-01-21 17:44
vpopmail
3.48
KB
-rwxr-xr-x
2017-01-21 17:44
vsftpd
8.28
KB
-rwxr-xr-x
2017-01-21 17:44
windows
16.12
KB
-rwxr-xr-x
2017-01-21 17:44
xntpd
8.59
KB
-rwxr-xr-x
2017-01-21 17:44
yum
2.8
KB
-rwxr-xr-x
2017-01-21 17:44
zypp
2.48
KB
-rwxr-xr-x
2017-01-21 17:44
zz-disk_space
6.02
KB
-rwxr-xr-x
2017-01-21 17:44
zz-fortune
1.69
KB
-rwxr-xr-x
2017-01-21 17:44
zz-lm_sensors
1.82
KB
-rwxr-xr-x
2017-01-21 17:44
zz-network
12.79
KB
-rwxr-xr-x
2017-01-21 17:44
zz-runtime
1.66
KB
-rwxr-xr-x
2017-01-21 17:44
zz-sys
3.01
KB
-rwxr-xr-x
2017-01-21 17:44
zz-zfs
5.91
KB
-rwxr-xr-x
2017-01-21 17:44
Save
Rename
#!/usr/bin/perl ########################################################################## # $Id$ ########################################################################## ####################################################### ## Copyright (c) 2008 Jaco Botha <jaco_botha@hotmail.com> ## Covered under the included MIT/X-Consortium License: ## http://www.opensource.org/licenses/mit-license.php ## All modifications and contributions by other persons to ## this script are assumed to have been donated to the ## Logwatch project and thus assume the above copyright ## and licensing terms. If you want to make contributions ## under your own copyright or a different license this ## must be explicitly stated in the contribution an the ## Logwatch project reserves the right to not accept such ## contributions. If you have made significant ## contributions to this script and want to claim ## copyright please contact logwatch-devel@lists.sourceforge.net. ######################################################### use strict; my ($Device, $Msg, $Test); my %ParamChanges = (); my %TempChanges = (); my %TempLimit = (); my %TempCritLimit = (); my %Pendsectors = (); my %NumPendsectors = (); my %Offsectors = (); my %NumOffsectors = (); my %Warnings = (); my %UnableToReg = (); my $ShutdownFailed = 0; my $StartupFailed = 0; my %NotInDatabase = (); my %CantMonitor = (); my $UnableToMonitor = 0; my %DriveTest = (); my %Failed = (); my %OtherList = (); my $DLine = 0; my %UnavailableDev = (); my %SataDisk = (); my %CheckFailed = (); my %Monitoring = (); my %DeviceInfo = (); my $Detail = $ENV{'LOGWATCH_DETAIL_LEVEL'} || 0; my $IgnoreUnmatched = $ENV{'smartd_ignore_unmatched'} || 0; while (defined(my $ThisLine = <STDIN>)) { chomp($ThisLine); if ( ($Device,$Msg) = ($ThisLine =~ /^Device: ([^,]+), No such device(?: or address)?, open\(\) failed/ )) { # ignore } elsif ( ($Device,$Msg) = ($ThisLine =~ /^Device: ([^,]+), open\(\) failed: No such device(?: or address)?/ )) { # ignore } elsif ( ($Device,$Msg) = ($ThisLine =~ /^Device: ([^,]+), found in smartd database./ )) { # ignore } elsif ( ($Device,$Msg) = ($ThisLine =~ /^Device: ([^,]+), not found in smartd database./ )) { # ignore } elsif ( ($Device,$Msg) = ($ThisLine =~ /^Device: ([^,]+), opened/)) { # ignore } elsif ( ($Device,$Msg) = ($ThisLine =~ /^Device: ([^,]+), appears to lack SMART*/ )) { # ignore } elsif ( ($Device) = ($ThisLine =~ /^Device: ([^,]+), enabled autosave \(cleared GLTSD bit\)\./ )) { # ignore } elsif ( ($Device) = ($ThisLine =~ /^Device: ([^,]+), enabled SMART Attribute Autosave/ )) { # ignore } elsif ( ($Device) = ($ThisLine =~ /^Device: ([^,]+), enabled SMART Automatic Offline Testing/ )) { # ignore } elsif ( ($Device) = ($ThisLine =~ /^Device: ([^,]+), Self-Test Log error count increased from \d+ to \d+/ )) { # ignore } elsif ( ($Device,$Msg) = ($ThisLine =~ /^Device: ([^,]+), new Self-Test Log error at hour timestamp \d+/ )) { # ignore } elsif ( ($Device,$Msg) = ($ThisLine =~ /^Device: ([^,]+), same Attribute has different ID numbers:/ )) { # ignore } elsif ( ($Device,$Msg) = ($ThisLine =~ /^Num *Test_Description *Status *Remaining *LifeTime/ )) { # ignore } elsif ( ($Device,$Msg) = ($ThisLine =~ /^# *[0-9]+ Short offline *Completed:/ )) { # ignore } elsif ( ($Device,$Msg) = ($ThisLine =~ /^# *[0-9]+ Extended offline *Completed:/ )) { # ignore } elsif ( ($Device,$Msg) = ($ThisLine =~ /^# *[0-9]+ Offline *Fatal or unknown error/ )) { # ignore } elsif ( ($Device) = ($ThisLine =~ /^Device: ([^,]+), not capable of SMART (Health Status |self-)check/ )) { # ignore } elsif ( ($Device) = ($ThisLine =~ /^Device: ([^,]+), is in STANDBY mode, skipping checks/ )) { # ignore } elsif ( ($Device) = ($ThisLine =~ /^Device: ([^,]+), self-test in progress, [0-9]+% remaining/ )) { # ignore } elsif ( ($Device) = ($ThisLine =~ /^Device: ([^,]+), previous self-test completed without error/ )) { # ignore } elsif ( ($Device) = ($ThisLine =~ /^Device: ([^,]+), type changed from \'\w+\' to \'\w+\'/ )) { # ignore } elsif ( ($Device) = ($ThisLine =~ /^Device: ([^,]+), state (?:read from|written to)/ )) { # ignore } elsif ( ($Device) = ($ThisLine =~ /^Device: ([^,]+), CHECK POWER STATUS spins up disk/ )) { # ignore } elsif ( ($Device) = ($ThisLine =~ /^Device: ([^,]+), STANDBY mode ignored due to reached limit of skipped checks/ )) { # ignore } elsif ( ($Device) = ($ThisLine =~ /^Device: ([^,]+), is back in ACTIVE or IDLE mode, resuming checks/ )) { # ignore } elsif ( $ThisLine =~ /^file \/var\/run\/smartd.pid written containing PID [0-9]+/ ) { # ignore } elsif ( ($Device,$Msg) = ($ThisLine =~ /^ *$/ )) { # ignore empty lines } elsif ( ($ThisLine =~ /^smartd version/) || ($ThisLine =~ /^smartd [0-9.]+ [0-9-]+ r[0-9]+ \[.*\]/) || ($ThisLine =~ /^Home page/) || ($ThisLine =~ /Copyright \(C\) [0-9-]+(?: by|,) Bruce Allen/) || ($ThisLine =~ /configuration file/i) || ($ThisLine =~ /\[trip Temperature is \d+ Celsius\]/) || ($ThisLine =~ /^Monitoring/) || ($ThisLine =~ /smartd received signal 15: Terminated/) || ($ThisLine =~ /smartd is exiting \(exit status 0\)/) || ($ThisLine =~ /smartd has fork/) || ($ThisLine =~ /smartd (startup|shutdown) succeeded/) || ($ThisLine =~ /Unable to register device (.*) \(no Directive -d removable\). Exiting/) || ($ThisLine =~ /Device (.*), SATA disks accessed via libata are not currently supported by smartmontools./) || ($ThisLine =~ /Device: (.*), IE \(SMART\) not enabled, skip device/) || ($ThisLine =~ /^Try '.*' to turn on SMART features/) || ($ThisLine =~ /Device: (.*), Bad IEC (SMART) mode page, err=-5, skip device/) || ($ThisLine =~ /Drive: DEVICESCAN, implied '-a' Directive on line [\d]+ of file/) || ($ThisLine =~ /packet devices \[this device CD\/DVD\] not SMART capable/) || ($ThisLine =~ /System clock time adjusted to the past/) ) { # ignore } elsif ( ($Device,$Msg) = ($ThisLine =~ /^Device: ([^,]+), is SMART capable. Adding to "monitor" list./ )) { $Monitoring{$Device} = 1; } elsif ( ($Device,$Msg) = ($ThisLine =~ /^Device: ([^,]+), ([^,]+, S\/N:[^,]+,.* FW:.*)/ )) { $DeviceInfo{$Device} = $Msg; } elsif ( ($Device,$Msg) = ($ThisLine =~ /^Device: ([^,]+), (\[[^,]+, lu id: .*)/ )) { $DeviceInfo{$Device} = $Msg; # } elsif ( ($Device,$Msg) = ($ThisLine =~ /^Device: ([^,]+), (.*)$/)) { # $ParamChanges{$Device}{$Msg}++; } elsif ( ($Device) = ($ThisLine =~ /^Device: ([^,]+), not found in smartd database./ )) { $NotInDatabase{$Device}++; } elsif ( my ($Device,$AttribType,$Code,$Name,undef,undef,undef,$RawVal) = ($ThisLine =~ /^Device: ([^,]+), SMART ([A-Za-z]+) Attribute: ([0-9]+) (Temperature_Celsius) changed from ([0-9]+) (\[Raw [0-9]+(?: \([0-9]+\s[0-9]+\s[0-9]+\s[0-9]+(?:\s[0-9])?\))?\]) to ([0-9]+) \[Raw ([0-9]+)(?: \([0-9]+\s[0-9]+\s[0-9]+\s[0-9]+(?:\s[0-9])?\))?\]/)) { push @{$TempChanges{$Device}}, $RawVal; # smartd reports temperature changes this way only for SCSI disks } elsif ( my ($Device,$AttribType,$Code,$Name,undef,undef,$NewVal) = ($ThisLine =~ /^Device: ([^,]+), SMART ([A-Za-z]+) Attribute: ([0-9]+) ([A-Za-z_]+) changed from ([0-9]+) (\[Raw [0-9]+\] )?to ([0-9]+)/)) { push (@{$ParamChanges{$Device}{"$AttribType: $Name ($Code)"}}, $NewVal); } elsif ( my ($Device,$Name,undef,$NewVal) = ($ThisLine =~ /^Device: ([^,]+), (.*) increased from ([0-9]+) to ([0-9]+)/) ) { push (@{$ParamChanges{$Device}{"information: $Name"}}, $NewVal); } elsif ( my ($Device,$NewVal) = ($ThisLine =~ /^Device: ([^,]+), initial Temperature is (\d+) Celsius/)) { push @{$TempChanges{$Device}},$NewVal; } elsif ( my ($Device,$Limit) = ($ThisLine =~ /^Device: ([^,]+), Temperature \d+ Celsius reached limit of (\d+) Celsius/)) { # Device: /dev/sda, Temperature 37 Celsius reached limit of 10 Celsius (Min/Max 37/37) $TempLimit{"$Device,$Limit"}++; } elsif ( my ($Device,$Limit) = ($ThisLine =~ /^Device: ([^,]+), Temperature \d+ Celsius reached critical limit of (\d+) Celsius/)) { # Device: /dev/sda, Temperature 38 Celsius reached critical limit of 15 Celsius (Min/Max 38!/39) $TempCritLimit{"$Device,$Limit"}++; } elsif ( my ($Device,$NewVal) = ($ThisLine =~ /^Device: ([^,]+), Temperature changed [-+]?\d+ Celsius to (\d+) Celsius/)) { push @{$TempChanges{$Device}},$NewVal; } elsif ( my ($Device, $Num) = ($ThisLine =~ /^Device: ([^,]+), (\d+) Currently unreadable \(pending\) sectors/) ) { $Pendsectors{$Device}++; $NumPendsectors{$Device} = $Num; } elsif ( my ($Device, $Num) = ($ThisLine =~ /^Device: ([^,]+), (\d+) Offline uncorrectable sectors/) ) { $Offsectors{$Device}++; $NumOffsectors{$Device} = $Num; } elsif ( my ($Device,$TestType) = ($ThisLine =~ /^Device: ([^,]+), starting scheduled ((?:Short|Long|Conveyance|Selective) Self-|Offline Immediate )Test/) ) { $DriveTest{$Device}{$TestType}++; } elsif ( my ($Device,$AttribType,$Code,$Name) = ($ThisLine =~ /^Device: ([^,]+), Failed SMART ([A-Za-z]+) Attribute: ([0-9]+) ([A-Za-z_]+)/)) { $Failed{$Device}{"$AttribType attribute: $Name ($Code)"}++; } elsif ( my ($Device, $Text) = ($ThisLine =~ /^Device: ([^,]+), failed (.*)$/) ) { $Failed{$Device}{"$Text"}++; } elsif ( ( $ThisLine =~ /warning/i ) ) { $Warnings{$ThisLine}++; } elsif ( my ($Device, $Text) = ( $ThisLine =~ /^Device: ([^,]+), (can't monitor.*)$/i ) ) { $CantMonitor{$Device}{$Text}++; } elsif ( ($ThisLine =~ /smartd startup failed/ ) ) { $StartupFailed++; } elsif ( ($ThisLine =~ /smartd shutdown failed/ ) ) { $ShutdownFailed++; } elsif ( my ($Device,$DLine) = ($ThisLine =~ /Unable to register SCSI device (.*) at line ([0-9]*) of file/) ) { $UnableToReg{"$Device,$DLine"}++ } elsif ( ($Device) = ($ThisLine =~ /Device ([^ ]+) not available/)) { $UnavailableDev{$Device}++; } elsif ( my ($Device) = ($ThisLine =~ /Device (.*): SATA disks accessed via libata are supported by Linux kernel versions 2.6.15-rc1 and above/) ) { $SataDisk{"$Device"}++; } elsif ($ThisLine =~ /Unable to monitor any SMART enabled devices\. Try debug \(-d\) option\. Exiting/) { $UnableToMonitor++; } elsif ( my ($Device) = ($ThisLine =~ /Device: ([^,]+), FAILED SMART self-check/) ) { $CheckFailed{$Device}++; } else { # Report any unmatched entries... $OtherList{$ThisLine}++; } } if (keys %CheckFailed) { print "\nFAILED SMART self-check !!!"; print "\n---------------------------"; foreach my $Device (sort keys %CheckFailed) { printf "\n %s: BACK UP DATA NOW!", $Device; } print "\n====================================\n"; } if ($UnableToMonitor > 0) { print "\nUnable to monitor any SMART enabled devices."; print "\n Try debug (-d) option: $UnableToMonitor Time(s)\n"; } if (keys %NotInDatabase) { print "\n"; foreach my $Device (sort keys %NotInDatabase) { print "$Device not in smartd database.\n"; } } if (keys %CantMonitor and $Detail) { foreach my $Device (sort keys %CantMonitor) { print "\n$Device :\n"; foreach my $Line (sort keys %{$CantMonitor{$Device}}) { print " $Line - " . $CantMonitor{$Device}{$Line} . " Time(s)\n"; } } } if (keys %ParamChanges) { foreach my $Device (sort keys %ParamChanges) { print "\n$Device :\n"; foreach my $Msg (sort keys %{$ParamChanges{$Device}}) { print " $Msg changed to "; my $count=0; foreach (@{$ParamChanges{$Device}{$Msg}}) { # print 12 values to each line if ($count % 12 == 0) { print "\n "; } print "$_, "; $count++; } print "\n"; } } } if (keys %TempChanges) { print "Temperature Changes\n==================\n"; my (@min,@max); foreach my $Device (sort keys %TempChanges) { if($Detail < 10) { my @sorttemp = sort @{$TempChanges{$Device}}; push @min, $sorttemp[0]; push @max, $sorttemp[$#sorttemp]; } elsif($Detail < 20) { my @sorttemp = sort @{$TempChanges{$Device}}; print "$Device : $sorttemp[0] - $sorttemp[$#sorttemp]\n"; } else { print "$Device : "; print join ", ",@{$TempChanges{$Device}}; print "\n"; } } if($Detail < 10) { my @sorttemp = sort @min; my $mint = $sorttemp[0]; my @sorttemp = sort @max; my $maxt = $sorttemp[$#sorttemp]; print "All devices: $mint - $maxt\n"; } } if (keys %TempCritLimit) { printf "\nReached critical temperature limit:\n"; foreach (keys %TempCritLimit) { my ($Device,$Limit)=split ","; print "\t" . $Device . ": reached limit of " . $Limit . " Celsius: ". $TempCritLimit{"$Device,$Limit"} . " Time(s)\n"; } } if (keys %TempLimit) { printf "\nReached temperature limit:\n"; foreach (keys %TempLimit) { my ($Device,$Limit)=split ","; print "\t" . $Device . ": reached limit of " . $Limit . " Celsius: ". $TempLimit{"$Device,$Limit"} . " Time(s)\n"; } } if (keys %Pendsectors){ print "\nCurrently unreadable (pending) sectors detected:\n"; foreach my $Device (sort keys %Pendsectors) { print "\t" . $Device . " - " . $Pendsectors{$Device} . " Time(s)\n"; print "\t" . $NumPendsectors{$Device} . " unreadable sectors detected\n"; } } if (keys %Offsectors){ print "\nOffline uncorrectable sectors detected:\n"; foreach my $Device (sort keys %Offsectors) { print "\t" . $Device . " - " . $Offsectors{$Device} . " Time(s)\n"; print "\t" . $NumOffsectors{$Device} . " offline uncorrectable sectors detected\n"; } } if (keys %Failed) { foreach my $Device (sort keys %Failed) { print "\n$Device :\n"; foreach my $Msg (sort keys %{$Failed{$Device}}) { print " Failed $Msg " . $Failed{$Device}{$Msg} . " Time(s)\n"; } } } if (keys %DriveTest) { foreach my $Device (sort keys %DriveTest) { print "\n$Device :\n"; foreach my $Type (sort keys %{$DriveTest{$Device}}) { print " started scheduled ${Type}Test " . $DriveTest{$Device}{$Type} . " Time(s)\n"; } } } if ( (keys %Warnings) ) { print "\nWarnings:\n"; foreach my $Line (sort {$Warnings{$b} <=> $Warnings{$a}} keys %Warnings) { print "\t" . $Line . " - ". $Warnings{$Line} . " Time(s)\n"; } } if ($StartupFailed) { print "\n Smartd startup failed: " . $StartupFailed . " Time(s)\n"; } if ($ShutdownFailed) { print "\n Smartd shutdown failed: " . $ShutdownFailed . " Time(s)\n"; } if ( (keys %UnableToReg) ) { print "\n Wrong configuration for devices:\n"; foreach (sort keys %UnableToReg) { ($Device,$DLine) = split ","; print " " . $Device . (" (line ") . $DLine . ") : ". $UnableToReg{"$Device,$DLine"} . " Time(s)\n"; } } if (%UnavailableDev) { print "\nUnavailable device:\n"; foreach my $Device (sort keys %UnavailableDev) { print " Device " . $Device . " : " . $UnavailableDev{$Device} . " Time(s)\n"; } } if (%SataDisk) { print "\nSATA disk(s) supported by Linux kernel >= 2.6.15-rc1:\n"; foreach my $Device (sort keys %SataDisk) { print " " .$Device .": Try adding '-d ata' or '-d sat' to the smartd.conf config file line\n"; } print "\n"; } if (keys %Monitoring and $Detail > 7) { print "\nMonitoring:\n"; foreach my $Device (sort keys %Monitoring) { print "\t$Device"; if (defined($DeviceInfo{$Device})) { print ": $DeviceInfo{$Device}\n"; } else { print "\n"; } } } if ((%OtherList) and (not $IgnoreUnmatched)){ print "\n**Unmatched Entries**\n"; foreach my $line (sort keys %OtherList) { print $line." : " .$OtherList{$line}." time(s)\n"; } } exit(0); # vi: shiftwidth=3 tabstop=3 syntax=perl et # Local Variables: # mode: perl # perl-indent-level: 3 # indent-tabs-mode: nil # End: