ethereal
Guru
- Joined
- Sep 10, 2012
- Messages
- 762
I have three cron jobs that don't work. they did when i used 12.2 u7.
smartreport.sh
upsreport.sh
zpoolstatus.sh
I think the problem is something to with the fact all three scripts email me. I have a script that copies my configuration file and that works (no email)
I ran the scripts from the freenas webgui - it pops up with and says Cron Job Started and has a big close button. I don't know if that popup is supposed to close itself or if i just hit close.
Any help would be appreciated with getting these scripts working again.
Thank you
smartreport.sh
upsreport.sh
zpoolstatus.sh
Code:
#!/bin/sh
### Parameters ###
logfile="/tmp/smart_report.tmp"
email=""
subject="SMART Status Report"
drives=$(for drive in $(sysctl -n kern.disks); do \
if [ "$(smartctl -i /dev/${drive} | grep "Serial Number" | awk '{print $3}')" ]
then printf ${drive}" "; fi done | awk '{for (i=NF; i!=0 ; i--) print $i }')
tempWarn=40
tempCrit=45
sectorsCrit=10
warnSymbol="?"
critSymbol="!"
### Set email headers ###
(
echo "To: ${email}"
echo "Subject: ${subject}"
echo "Content-Type: text/html"
echo "MIME-Version: 1.0"
echo -e "\r\n"
) > ${logfile}
### Set email body ###
echo "<pre style=\"font-size:14px\">" >> ${logfile}
###### summary ######
(
echo ""
echo "########## SMART status report summary for all drives ##########"
echo ""
echo "+------+------------------+----+-----+-----+-----+-------+-------+--------+------+----------+------+-------+"
echo "|Device|Serial |Temp|Power|Start|Spin |ReAlloc|Current|Offline |Seek |Total |High |Command|"
echo "| | | |On |Stop |Retry|Sectors|Pending|Uncorrec|Errors|Seeks |Fly |Timeout|"
echo "| | | |Hours|Count|Count| |Sectors|Sectors | | |Writes|Count |"
echo "+------+------------------+----+-----+-----+-----+-------+-------+--------+------+----------+------+-------+"
) >> ${logfile}
for drive in $drives
do
(
smartctl -A -i -v 7,hex48 /dev/${drive} | \
awk -v device=${drive} -v tempWarn=${tempWarn} -v tempCrit=${tempCrit} -v sectorsCrit=${sectorsCrit} \
-v warnSymbol=${warnSymbol} -v critSymbol=${critSymbol} '\
/Serial Number:/{serial=$3} \
/Temperature_Celsius/{temp=$10} \
/Power_On_Hours/{onHours=$10} \
/Start_Stop_Count/{startStop=$10} \
/Spin_Retry_Count/{spinRetry=$10} \
/Reallocated_Sector/{reAlloc=$10} \
/Current_Pending_Sector/{pending=$10} \
/Offline_Uncorrectable/{offlineUnc=$10} \
/Seek_Error_Rate/{seekErrors=("0x" substr($10,3,4));totalSeeks=("0x" substr($10,7))} \
/High_Fly_Writes/{hiFlyWr=$10} \
/Command_Timeout/{cmdTimeout=$10} \
END {
if (temp > tempCrit || reAlloc > sectorsCrit || pending > sectorsCrit || offlineUnc > sectorsCrit)
device=device " " critSymbol;
else if (temp > tempWarn || reAlloc > 0 || pending > 0 || offlineUnc > 0)
device=device " " warnSymbol;
seekErrors=sprintf("%d", seekErrors);
totalSeeks=sprintf("%d", totalSeeks);
if (totalSeeks == "0") {
seekErrors="N/A";
totalSeeks="N/A";
}
if (hiFlyWr == "") hiFlyWr="N/A";
if (cmdTimeout == "") cmdTimeout="N/A";
printf "|%-6s|%-18s| %s |%5s|%5s|%5s|%7s|%7s|%8s|%6s|%10s|%6s|%7s|\n",
device, serial, temp, onHours, startStop, spinRetry, reAlloc, pending, offlineUnc, \
seekErrors, totalSeeks, hiFlyWr, cmdTimeout;
}'
) >> ${logfile}
done
(
echo "+------+------------------+----+-----+-----+-----+-------+-------+--------+------+----------+------+-------+"
echo ""
echo ""
) >> ${logfile}
###### for each drive ######
for drive in $drives
do
brand=`smartctl -i /dev/${drive} | grep "Model Family" | awk '{print $3, $4, $5}'`
if [ -z "$brand" ];
then
brand=`smartctl -i /dev/${drive} | grep "Device Model" | awk '{print $3, $4, $5}'`
fi
serial=`smartctl -i /dev/${drive} | grep "Serial Number" | awk '{print $3}'`
(
echo ""
echo "########## SMART status report for ${drive} drive (${brand}: ${serial}) ##########"
smartctl -n never -H -A -l error /dev/${drive}
smartctl -n never -l selftest /dev/${drive}
echo ""
echo ""
) >> ${logfile}
done
sed -i '' -e '/smartctl 6.3/d' ${logfile}
sed -i '' -e '/Copyright/d' ${logfile}
sed -i '' -e '/=== START OF READ/d' ${logfile}
sed -i '' -e '/SMART Attributes Data/d' ${logfile}
sed -i '' -e '/Vendor Specific SMART/d' ${logfile}
sed -i '' -e '/SMART Error Log Version/d' ${logfile}
echo "</pre>" >> ${logfile}
### Send report ###
sendmail -t < ${logfile}
rm ${logfile}
Code:
#!/bin/sh
### Parameters ###
logfile="/tmp/ups_report.tmp"
email=""
subject="UPS Status Report for FreeNAS"
ups="ups@localhost"
### Set email headers ###
(
echo "To: ${email}"
echo "Subject: ${subject}"
echo "Content-Type: text/html"
echo "MIME-Version: 1.0"
echo -e "\r\n"
) > ${logfile}
### Set email body ###
(
echo "<pre style=\"font-size:14px\">"
echo ""
date "+Time: %Y-%m-%d %H:%M:%S"
echo "UPS Status: `upsc ${ups} ups.status`"
echo "Output Load: `upsc ${ups} ups.load` %"
echo "Output Voltage: `upsc ${ups} output.voltage` V"
echo "Battery Runtime: `upsc ${ups} battery.runtime` s"
echo "Battery Charge: `upsc ${ups} battery.charge` %"
echo ""
echo "</pre>"
) >> ${logfile}
### Send report ###
sendmail -t < ${logfile}
rm ${logfile}
Code:
#!/bin/sh
### Parameters ###
logfile="/tmp/zpool_report.tmp"
email=""
subject="ZPool Status Report for FreeNAS"
pools="freenas-boot Storage Working"
usedWarn=75
usedCrit=90
scrubAgeWarn=30
warnSymbol="?"
critSymbol="!"
### Set email headers ###
(
echo "To: ${email}"
echo "Subject: ${subject}"
echo "Content-Type: text/html"
echo "MIME-Version: 1.0"
echo -e "\r\n"
) > "$logfile"
### Set email body ###
echo "<pre style=\"font-size:14px\">" >> "$logfile"
###### summary ######
(
echo ""
echo "########## ZPool status report summary for all pools ##########"
echo ""
echo "+--------------+--------+------+------+------+----+--------+------+-----+"
echo "|Pool Name |Status |Read |Write |Cksum |Used|Scrub |Scrub |Last |"
echo "| | |Errors|Errors|Errors| |Repaired|Errors|Scrub|"
echo "| | | | | | |Bytes | |Age |"
echo "+--------------+--------+------+------+------+----+--------+------+-----+"
) >> "$logfile"
for pool in $pools; do
status="$(zpool list -H -o health "$pool")"
errors="$(zpool status "$pool" | egrep "(ONLINE|DEGRADED|FAULTED|UNAVAIL|REMOVED)[ \t]+[0-9]+")"
readErrors=0
for err in $(echo "$errors" | awk '{print $3}'); do
if echo "$err" | egrep -q "[^0-9]+"; then
readErrors=1000
break
fi
readErrors=$((readErrors + err))
done
writeErrors=0
for err in $(echo "$errors" | awk '{print $4}'); do
if echo "$err" | egrep -q "[^0-9]+"; then
writeErrors=1000
break
fi
writeErrors=$((writeErrors + err))
done
cksumErrors=0
for err in $(echo "$errors" | awk '{print $5}'); do
if echo "$err" | egrep -q "[^0-9]+"; then
cksumErrors=1000
break
fi
cksumErrors=$((cksumErrors + err))
done
if [ "$readErrors" -gt 999 ]; then readErrors=">1K"; fi
if [ "$writeErrors" -gt 999 ]; then writeErrors=">1K"; fi
if [ "$cksumErrors" -gt 999 ]; then cksumErrors=">1K"; fi
used="$(zpool list -H -p -o capacity "$pool")"
scrubRepBytes="N/A"
scrubErrors="N/A"
scrubAge="N/A"
if [ "$(zpool status "$pool" | grep "scan" | awk '{print $2}')" = "scrub" ]; then
scrubRepBytes="$(zpool status "$pool" | grep "scan" | awk '{print $4}')"
scrubErrors="$(zpool status "$pool" | grep "scan" | awk '{print $10}')"
scrubDate="$(zpool status "$pool" | grep "scan" | awk '{print $17"-"$14"-"$15"_"$16}')"
scrubTS="$(date -j -f "%Y-%b-%e_%H:%M:%S" "$scrubDate" "+%s")"
currentTS="$(date "+%s")"
scrubAge=$((((currentTS - scrubTS) + 43200) / 86400))
fi
if [ "$status" = "FAULTED" ] \
|| [ "$used" -gt "$usedCrit" ] \
|| ( [ "$scrubErrors" != "N/A" ] && [ "$scrubErrors" != "0" ] )
then
symbol="$critSymbol"
elif [ "$status" != "ONLINE" ] \
|| [ "$readErrors" != "0" ] \
|| [ "$writeErrors" != "0" ] \
|| [ "$cksumErrors" != "0" ] \
|| [ "$used" -gt "$usedWarn" ] \
|| [ "$scrubRepBytes" != "0" ] \
|| [ "$(echo "$scrubAge" | awk '{print int($1)}')" -gt "$scrubAgeWarn" ]
then
symbol="$warnSymbol"
else
symbol=" "
fi
(
printf "|%-12s %1s|%-8s|%6s|%6s|%6s|%3s%%|%8s|%6s|%5s|\n" \
"$pool" "$symbol" "$status" "$readErrors" "$writeErrors" "$cksumErrors" \
"$used" "$scrubRepBytes" "$scrubErrors" "$scrubAge"
) >> "$logfile"
done
(
echo "+--------------+--------+------+------+------+----+--------+------+-----+"
echo ""
echo ""
) >> "$logfile"
###### for each pool ######
for pool in $pools; do
(
echo ""
echo "########## ZPool status report for ${pool} ##########"
echo ""
zpool status -v "$pool"
echo ""
echo ""
) >> "$logfile"
done
echo "</pre>" >> "$logfile"
### Send report ###
sendmail -t < "$logfile"
rm "$logfile"
I think the problem is something to with the fact all three scripts email me. I have a script that copies my configuration file and that works (no email)
I ran the scripts from the freenas webgui - it pops up with and says Cron Job Started and has a big close button. I don't know if that popup is supposed to close itself or if i just hit close.
Any help would be appreciated with getting these scripts working again.
Thank you