This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
storage:brocade_scripts [2022/06/13 10:25] manu [dev] |
storage:brocade_scripts [2024/02/16 18:24] (current) manu |
||
---|---|---|---|
Line 23: | Line 23: | ||
# html_tag;nagios_tag;reserved;output | # html_tag;nagios_tag;reserved;output | ||
#==================================================================== | #==================================================================== | ||
- | # version 1.0 | + | # version 1.0 02-2018 eif |
+ | # version 1.1 02-2024 eif add port signal strength | ||
dir=`dirname $0` | dir=`dirname $0` | ||
Line 35: | Line 36: | ||
export logname=$logpath/$sn.log | export logname=$logpath/$sn.log | ||
TMPFILE=$logpath/tempo_file | TMPFILE=$logpath/tempo_file | ||
+ | |||
+ | month=$(date "+%Y-%m") | ||
+ | archpath=/storage/san/backup/$month | ||
os=$(uname -s | tr 'A-Z' 'a-z') | os=$(uname -s | tr 'A-Z' 'a-z') | ||
- | USER=admin | + | USER=report |
- | listswitch="sansw1 sansw2" # All SAN switches from all fabric separated by space | + | listswitch="swsan01 swsan02" # All SAN switches from all fabric separated by space |
#NAGIOSTAG="0=OK, 1=WARNING, 2=CRITICAL, 3=UNKNOWN" | #NAGIOSTAG="0=OK, 1=WARNING, 2=CRITICAL, 3=UNKNOWN" | ||
Line 46: | Line 50: | ||
COLOR[2]="#FF2400" # red #DF013A | COLOR[2]="#FF2400" # red #DF013A | ||
COLOR[3]="yellow" # yellow #F3F781 | COLOR[3]="yellow" # yellow #F3F781 | ||
- | COLOR[4]="#56A5EC" # blue | + | COLOR[4]="#86EFF6" # blue |
COLOR[5]="#FFFFFF" # white | COLOR[5]="#FFFFFF" # white | ||
#FFA500 : orange | #FFA500 : orange | ||
- | COLOR[6]="#3090C7" # Blue Ivry for SAN blue | + | #COLOR[6]="#33CAFF" # Blue SAN blue |
+ | COLOR[6]=" #85C1E9" # Blue SAN blue | ||
COLOR[7]="#E77471" # Light Coral for SAN red | COLOR[7]="#E77471" # Light Coral for SAN red | ||
Line 87: | Line 92: | ||
fi | fi | ||
fi | fi | ||
+ | } | ||
+ | |||
+ | #---------------------- | ||
+ | get_fids () | ||
+ | { | ||
+ | for sw in $(cat $list) | ||
+ | do | ||
+ | echo "######## $sw ########" | ||
+ | ${SSH}$sw 'lscfg --show' > $logfile | ||
+ | fids=$(cat $logfile | grep '|' | sed 's/^\ //' | cut -d' ' -f2- | sed 's/|/\ /g' | tr -s ' ' | tr ' ' '\n' | sort -u | sed '/^$/d' | tr '\n' ' ') | ||
+ | echo "FID : $fids" | ||
+ | done | ||
+ | |||
+ | ### fosexec --fid 2 -cmd "switchshow" | ||
+ | } | ||
+ | |||
+ | #---------------------------- | ||
+ | list_switch_ports_signal () | ||
+ | { | ||
+ | fabric=fabric | ||
+ | for sw in $(echo $listswitch) | ||
+ | do | ||
+ | echo "######## $sw" | ||
+ | ssh $USER@$sw "sfpshow -all" > $logpath/sfpshow_${fabric}.csv | ||
+ | done | ||
} | } | ||
Line 96: | Line 126: | ||
for sw in $(echo $listswitch) | for sw in $(echo $listswitch) | ||
do | do | ||
+ | echo "######## $sw" | ||
ssh $USER@$sw "configshow" | egrep "^alias|^zone|^cfg|^enable" > $logpath/configshow_${fabric}.csv | ssh $USER@$sw "configshow" | egrep "^alias|^zone|^cfg|^enable" > $logpath/configshow_${fabric}.csv | ||
fabricname=$(grep -i '^enable:' $logpath/configshow_${fabric}.csv | awk -F':' '{print $2}') | fabricname=$(grep -i '^enable:' $logpath/configshow_${fabric}.csv | awk -F':' '{print $2}') | ||
Line 101: | Line 132: | ||
switchname=$(grep -i '^switchName:' $TMPFILE.tempo | awk -F':' '{print $2}' | tr 'A-Z' 'a-z') | switchname=$(grep -i '^switchName:' $TMPFILE.tempo | awk -F':' '{print $2}' | tr 'A-Z' 'a-z') | ||
swdomain=$(grep -i '^switchDomain:' $TMPFILE.tempo | awk -F':' '{print $2}') | swdomain=$(grep -i '^switchDomain:' $TMPFILE.tempo | awk -F':' '{print $2}') | ||
+ | ssh $USER@$sw "sfpshow -all" > $logpath/sfpshow-all_${fabricname}_${switchname}_full | ||
+ | cat $logpath/sfpshow-all_${fabricname}_${switchname}_full | egrep 'Slot|Power' | sed 's/^Slot/\n/g' | tr -s ' ' | sed 's/^\ //g' | sed 's/Port\ //' | sed 's/\//;/' | sed 's/:/;/' > $logpath/sfpshow-all_${fabname}_${switchname} | ||
+ | ssh $USER@$sw "sfpshow" | tr -s ' ' | sed 's/\ //g' | sed 's/Slot//' | sed 's/Port//' | cut -d':' -f1,5 | sed 's/\//;/' > $logpath/sfpshow_${fabricname}_${switchname} | ||
echo "H3;0;TAG;FABRIC: $fabricname SWITCHNAME: $switchname" > $logpath/switchshow_${fabricname}_${switchname}.csv | echo "H3;0;TAG;FABRIC: $fabricname SWITCHNAME: $switchname" > $logpath/switchshow_${fabricname}_${switchname}.csv | ||
- | echo "TH;4;TAG;Index;Slot;Port;Speed;State;Protocol;Type;WWN;Alias;Zoned" >> $logpath/switchshow_${fabricname}_${switchname}.csv | + | echo "TH;4;TAG;Index;Slot;Port;Speed;State;Protocol;Type;WWN;Alias;Zoned;SFP_speed;RXpower;TXpower" >> $logpath/switchshow_${fabricname}_${switchname}.csv |
if [ $(grep -qi '^Index;Port;' $TMPFILE.tempo; echo $?) -eq 0 ] | if [ $(grep -qi '^Index;Port;' $TMPFILE.tempo; echo $?) -eq 0 ] | ||
then | then | ||
slot=";NA" | slot=";NA" | ||
- | cat $TMPFILE.tempo | sed -e "/;/ s/;/${slot};/2" > $logpath/switchshow_${fabricname}_${switchname} | + | cat $TMPFILE.tempo | sed -e "/;/ s/;/${slot};/2" | sed 's/^;//' | sed 's/^/;/' | grep -v ";FC;Router" > $logpath/switchshow_${fabricname}_${switchname} |
rm $TMPFILE.tempo | rm $TMPFILE.tempo | ||
else | else | ||
- | mv $TMPFILE.tempo $logpath/switchshow_${fabricname}_${switchname} | + | cat $TMPFILE.tempo | sed 's/^;//' | sed 's/^/;/' | grep -v ";FC;Router" > $logpath/switchshow_${fabricname}_${switchname} |
+ | rm $TMPFILE.tempo | ||
fi | fi | ||
+ | |||
+ | |||
for line in $(cat $logpath/switchshow_${fabricname}_${switchname} | grep "FC" | grep -v '^FC' | cut -d';' -f1-4,7-) | for line in $(cat $logpath/switchshow_${fabricname}_${switchname} | grep "FC" | grep -v '^FC' | cut -d';' -f1-4,7-) | ||
do | do | ||
+ | port=$(echo $line | cut -d';' -f3,4) | ||
+ | sfpspeed=$(grep "^${port}:" $logpath/sfpshow_${fabricname}_${switchname} | cut -d':' -f2 | tr ' ' '\n' | grep _Gbps | sed 's/_Gbps//' | rev | cut -d',' -f1 | rev) | ||
+ | if [ "$sfpspeed" == "" ] | ||
+ | then | ||
+ | sfpspeed="NA" | ||
+ | fi | ||
+ | ############################ | ||
+ | rxpower=$(grepp "^${port};" $logpath/sfpshow-all_${fabricname}_${switchname} | grep "RX Power" | cut -d';' -f2- | sed 's/\ dBm\ /|dBm|/g') | ||
+ | txpower=$(grepp "^${port};" $logpath/sfpshow-all_${fabricname}_${switchname} | grep "TX Power" | cut -d';' -f2- | sed 's/\ dBm\ /|dBm|/g') | ||
+ | |||
+ | # get color for fabric | ||
NAGIOSTAG=0 | NAGIOSTAG=0 | ||
- | if [ $(echo $fabricname | grep -qi blue;echo $?) -eq 0 ] | + | # for linux suff=$(echo $fabricname | tr [:alpha:] ' ' | awk '{print $1}') |
+ | suff=$(echo $fabricname | rev | cut -c1) | ||
+ | modulo=$(echo $(($suff % 2)) ) | ||
+ | if [ "$modulo" -eq 0 ] | ||
then | then | ||
NAGIOSTAG=6 | NAGIOSTAG=6 | ||
Line 132: | Line 183: | ||
wwn="" | wwn="" | ||
alias="" | alias="" | ||
- | echo "${prefix}${begin};;${wwn};${alias};${zone}" >> $logpath/switchshow_${fabricname}_${switchname}.csv | + | rxpower="" |
+ | txpower="" | ||
+ | echo "${prefix}${begin};;${wwn};${alias};${zone};${sfpspeed};${rxpower};${txpower}" >> $logpath/switchshow_${fabricname}_${switchname}.csv | ||
else | else | ||
if [ $(echo $line | egrep "E-Port" > /dev/null; echo $?) -eq 0 ] | if [ $(echo $line | egrep "E-Port" > /dev/null; echo $?) -eq 0 ] | ||
Line 147: | Line 200: | ||
alias=$(echo $line1 | cut -d';' -f9- | sed 's/;/|/g') | alias=$(echo $line1 | cut -d';' -f9- | sed 's/;/|/g') | ||
fi | fi | ||
- | echo "${prefix}${begin};${wwn};${alias}(ISL);${zone}" >> $logpath/switchshow_${fabricname}_${switchname}.csv | + | echo "${prefix}${begin};${wwn};${alias}(ISL);${zone};${sfpspeed};${rxpower};${txpower}" >> $logpath/switchshow_${fabricname}_${switchname}.csv |
else | else | ||
if [ $(echo $line | egrep "L-Port|NPIV" > /dev/null; echo $?) -eq 0 ] | if [ $(echo $line | egrep "L-Port|NPIV" > /dev/null; echo $?) -eq 0 ] | ||
Line 174: | Line 227: | ||
fi | fi | ||
fi | fi | ||
- | echo "${prefix}${begin};${wwn};${alias};${zone}" >> $logpath/switchshow_${fabricname}_${switchname}.csv | + | echo "${prefix}${begin};${wwn};${alias};${zone};${sfpspeed};${rxpower};${txpower}" >> $logpath/switchshow_${fabricname}_${switchname}.csv |
fi | fi | ||
done | done | ||
Line 208: | Line 261: | ||
fi | fi | ||
fi | fi | ||
- | echo "${prefix}${begin};${wwn};${alias};${zone}" >> $logpath/switchshow_${fabricname}_${switchname}.csv | + | echo "${prefix}${begin};${wwn};${alias};${zone};${sfpspeed};${rxpower};${txpower}" >> $logpath/switchshow_${fabricname}_${switchname}.csv |
else | else | ||
begin=$(echo $line | cut -d';' -f1-8) | begin=$(echo $line | cut -d';' -f1-8) | ||
wwn=$(echo $line | cut -d';' -f9) | wwn=$(echo $line | cut -d';' -f9) | ||
alias="(unknown_type)" | alias="(unknown_type)" | ||
- | echo "${prefix}${begin};${wwn};${alias};${zone}" >> $logpath/switchshow_${fabricname}_${switchname}.csv | + | echo "${prefix}${begin};${wwn};${alias};${zone};${sfpspeed};${rxpower};${txpower}" >> $logpath/switchshow_${fabricname}_${switchname}.csv |
fi | fi | ||
fi | fi | ||
Line 219: | Line 272: | ||
fi | fi | ||
done | done | ||
- | rm $logpath/switchshow_${fabricname}_${switchname} | + | # rm $logpath/switchshow_${fabricname}_${switchname} |
mv $logpath/switchshow_${fabricname}_${switchname}.csv $logpath/swsan_${fabricname}_switchshow_${switchname}.csv | mv $logpath/switchshow_${fabricname}_${switchname}.csv $logpath/swsan_${fabricname}_switchshow_${switchname}.csv | ||
mv $logpath/configshow_${fabric}.csv $logpath/swsan_${fabricname}_configshow_${switchname}.csv | mv $logpath/configshow_${fabric}.csv $logpath/swsan_${fabricname}_configshow_${switchname}.csv | ||
done | done | ||
} | } | ||
+ | |||
#---------------------------- | #---------------------------- | ||
Line 240: | Line 294: | ||
for i in $(ls $logpath/swsan_${fabricname}_switchshow_*.csv) | for i in $(ls $logpath/swsan_${fabricname}_switchshow_*.csv) | ||
do | do | ||
- | cat $i | grep '^TD;' >> $logpath/san_result.csv | + | cat $i | grep '^TD;' | rev | cut -d';' -f2- | rev >> $logpath/san_result.csv |
done | done | ||
echo "H3;0;TAG;Alias defined in Fabric ${fabricname} but not connected" | tee $logpath/swsan_${fabricname}_unused.csv | echo "H3;0;TAG;Alias defined in Fabric ${fabricname} but not connected" | tee $logpath/swsan_${fabricname}_unused.csv | ||
echo "TH;4;TAG;alias;number of defined zones;zone name" | tee -a $logpath/swsan_${fabricname}_unused.csv | echo "TH;4;TAG;alias;number of defined zones;zone name" | tee -a $logpath/swsan_${fabricname}_unused.csv | ||
- | sed '1d' $logpath/san_result.csv | grep ";Online;" | rev | cut -d';' -f2 | rev | sed 's/(no_alias)//' | sed 's/(multiples_alias)//' | sed '/^$/d' | grep -v "(ISL)" | tr ' ' '\n' | sed 's/$/;/' > $logpath/san_result1.csv | + | sed '1d' $logpath/san_result.csv | grep ";Online;" | rev | cut -d';' -f2 | rev | sed 's/(no_alias)//' | sed 's/(multiples_alias)//' | sed '/^$/d' | grep -v "(ISL)" | tr ' ' '\n' | sed 's/$/;/' > $logpath/saesult1.csv |
for alias in $(cat $filename | grep '^alias' | cut -d'.' -f2- | cut -d':' -f1 | sort | uniq) | for alias in $(cat $filename | grep '^alias' | cut -d'.' -f2- | cut -d':' -f1 | sort | uniq) | ||
Line 433: | Line 487: | ||
send_wiki() | send_wiki() | ||
{ | { | ||
- | htmlinventory=$logpath/san_switchshow.html | + | dokupath=/var/www/html/archives/inventory/san |
- | dokupath=/var/www/html/data/pages/inventory/san | + | |
- | dokuhost=dokuwiki01 | + | |
dokuuser=apache | dokuuser=apache | ||
dokugrp=apache | dokugrp=apache | ||
- | #file_exist=$(ssh $dokuhost "ls $dokupath/$xlsmonthly > /dev/null 2>&1" ;echo $?) | + | for file1 in san_switchshow.html san_unused_alias.html san_full_config.txt |
- | #echo ${file_exist} | + | do |
- | #if [ ${file_exist} != 0 ] | + | sudo su - root -c "/bin/cp $logpath/$file1 $dokupath" |
- | #then | + | done |
- | # echo "Creating monthly file hmcscan_ALL-server_${cur_month}.xls" | + | |
- | # scp -p $xlsinventory $dokuhost:$dokupath/$xlsmonthly | + | sudo su - root -c "/bin/chown -R $dokuuser.$dokugrp $dokupath" |
- | # scp $dokuhost:$dokupath/$dokufilename $logpath | + | |
- | # echo "\n\nhttp://dokuwiki01/data/pages/inventory/hmcscan/$xlsmonthly" >> $logpath/$dokufilename | + | # Archive |
- | # scp -p $logpath/$dokufilename $dokuhost:$dokupath | + | if [ ! -e $archpath/san_switchshow.html ] |
- | #else | + | then |
- | # echo "Monthly file available, not creating" | + | for file1 in san_switchshow.html san_unused_alias.html san_full_config.txt |
- | #fi | + | do |
- | # | + | cp $logpath/$file1 $archpath |
- | scp -p -r $htmlinventory $dokuhost:$dokupath | + | done |
- | scp -p -r $logpath/san_unused_alias.html $dokuhost:$dokupath | + | fi |
- | scp -p -r $logpath/san_full_config.txt $dokuhost:$dokupath | + | |
- | #scp -p $xlsinventory $dokuhost:$dokupath | + | |
- | ssh $dokuhost "chown -R $dokuuser.$dokugrp $dokupath" | + | |
} | } | ||
Line 469: | Line 519: | ||
echo "***** Switchshow" | echo "***** Switchshow" | ||
list_switch_ports | list_switch_ports | ||
+ | echo "***** Sfpshow" | ||
+ | #list_switch_ports_signal | ||
echo "***** convert HTML" | echo "***** convert HTML" | ||
convert_html > $logpath/san_switchshow.html | convert_html > $logpath/san_switchshow.html | ||
Line 484: | Line 536: | ||
main > $logname 2>&1 | main > $logname 2>&1 | ||
+ | |||
</code> | </code> | ||
===== Backup Brocade SAN switch ===== | ===== Backup Brocade SAN switch ===== | ||
+ | ==== With standard user ==== | ||
+ | |||
+ | <cli prompt='#'> | ||
+ | [root@mgmt01 san]# cat backup_brocade_config.sh | ||
+ | </cli> | ||
+ | <code> | ||
+ | #!/bin/bash | ||
+ | #set -x | ||
+ | #==================================================================== | ||
+ | #@(#) Script to backup SAN switches | ||
+ | #==================================================================== | ||
+ | # version 1.0 eif | ||
+ | |||
+ | dir=`dirname $0` | ||
+ | |||
+ | . $dir/.env | ||
+ | |||
+ | os=$(uname -s | tr 'A-Z' 'a-z') | ||
+ | |||
+ | USER=report | ||
+ | listswitch="san01 san02" # All SAN switches from all fabric separated by space | ||
+ | |||
+ | month=$(date "+%Y-%m") | ||
+ | archpath=/workdir/san/backup/$month | ||
+ | |||
+ | |||
+ | #---------------------------- | ||
+ | initialize () | ||
+ | { | ||
+ | echo "# Initialize" | ||
+ | mkdir -p $archpath > /dev/null 2>&1 | ||
+ | } | ||
+ | |||
+ | #---------------------------- | ||
+ | backup_san_switches () | ||
+ | { | ||
+ | |||
+ | fabric=fabric | ||
+ | for sw in $listswitch | ||
+ | do | ||
+ | echo "######## $sw" | ||
+ | ssh $USER@$sw "configshow -all" > $archpath/${sw}.txt | ||
+ | done | ||
+ | } | ||
+ | |||
+ | |||
+ | ############################# | ||
+ | # Main | ||
+ | ############################# | ||
+ | main () | ||
+ | { | ||
+ | date | ||
+ | echo "***** initialize" | ||
+ | initialize | ||
+ | echo "***** Backup SAN switches" | ||
+ | backup_san_switches | ||
+ | |||
+ | date | ||
+ | } | ||
+ | |||
+ | main > $logname 2>&1 | ||
+ | </code> | ||
+ | |||
+ | ==== With privileged user ==== | ||
<cli prompt='#'> | <cli prompt='#'> | ||
Line 536: | Line 653: | ||
</cli> | </cli> | ||
+ | ===== List errors on ports ===== | ||
+ | List error count\\ | ||
+ | **check_porterrshow.sh** | ||
+ | <cli prompt='$'> | ||
+ | #!/bin/bash | ||
+ | #set -x | ||
+ | # | ||
+ | #@(#) Send error on SAN switches ports | ||
+ | # | ||
+ | # version: 1.0 2014 | ||
+ | # version: 1.1 02-2020 Manu | ||
+ | # | ||
+ | |||
+ | dir=`dirname $0` | ||
+ | . $dir/.env | ||
+ | |||
+ | |||
+ | # Variables | ||
+ | destination="bp.san@test.lu" | ||
+ | #destination="myemail@test.lu" | ||
+ | user_repoting="readonly" | ||
+ | SSH="ssh -o ConnectTimeout=10 -o ConnectionAttempts=1 -o BatchMode=yes ${user_repoting}@" | ||
+ | logfile=$logpath/porterrshow.txt | ||
+ | errfile=$logpath/porterrshow.err | ||
+ | list=$dir/sansw_list.txt | ||
+ | server=$(hostname -s) | ||
+ | |||
+ | # clear log | ||
+ | if [[ -f $logfile ]] | ||
+ | then | ||
+ | rm $logfile > /dev/null 2>&1 | ||
+ | fi | ||
+ | |||
+ | if [[ -f $errfile ]] | ||
+ | then | ||
+ | rm $errfile > /dev/null 2>&1 | ||
+ | fi | ||
+ | |||
+ | |||
+ | #---------------------- | ||
+ | get_fids () | ||
+ | { | ||
+ | for sw in $(cat $list) | ||
+ | do | ||
+ | echo "######## $sw ########" | ||
+ | ${SSH}$sw 'lscfg --show' > $logfile | ||
+ | if [ "$?" -ne "0" ] | ||
+ | then | ||
+ | echo "Connection error on san switch: ${SSH}$sw" >> $errfile | ||
+ | fi | ||
+ | fids=$(cat $logfile | grep '|' | sed 's/^\ //' | cut -d' ' -f2- | sed 's/|/\ /g' | tr -s ' ' | tr ' ' '\n' | sort -u | sed '/^$/d' | tr '\n' ' ') | ||
+ | echo "FID : $fids" | ||
+ | done | ||
+ | |||
+ | ### fosexec --fid 2 -cmd "switchshow" | ||
+ | |||
+ | } | ||
+ | |||
+ | #---------------------- | ||
+ | porterrshow () | ||
+ | { | ||
+ | echo "====== Porterrshow on SAN switches (generated from $server) "$(date "+%d-%m-%Y %H:%M")" ======" > $logfile | ||
+ | echo >> $logfile | ||
+ | |||
+ | for sw in $(cat $list) | ||
+ | do | ||
+ | echo "######## $sw ########" | ||
+ | echo "===== $sw =====" >> $logfile | ||
+ | ${SSH}$sw "porterrshow" > $logfile.1 | ||
+ | cat $logfile.1 | tr '\t' ' ' | sed 's/\ /;/g' | tr -s ';' | grep -v ';0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;' | sed 's/^;frames;/index;frames;frames;/' | sed 's/;c3timeout;/;c3timeout;c3timeout;/' | sed 's/^;tx;/index;tx;/' | sed 's/;sig;tx;/;sig;\ ;\ ;tx;/' | sed 's/^;//' | rev | sed 's/^;//' | rev | sed 's/^/;/' | sed 's/$/;/' | sed '/^;index;/s/;/^/g' | sed 's/;/|/g' >> $logfile | ||
+ | echo >> $logfile | ||
+ | done | ||
+ | |||
+ | } | ||
+ | |||
+ | #---------------------- | ||
+ | sendemail () | ||
+ | { | ||
+ | |||
+ | if [[ -s $errfile ]] | ||
+ | then | ||
+ | cat $errfile | mailx -s "Connection error Porterrshow SAN" $destination | ||
+ | fi | ||
+ | } | ||
+ | |||
+ | #---------------------- | ||
+ | send_wiki () | ||
+ | { | ||
+ | dokupath=/var/www/html/archives/inventory/san | ||
+ | dokuuser=apache | ||
+ | dokugrp=apache | ||
+ | |||
+ | for file1 in $logfile | ||
+ | do | ||
+ | sudo su - root -c "/bin/cp $file1 $dokupath" | ||
+ | done | ||
+ | |||
+ | sudo su - root -c "/bin/chown -R $dokuuser.$dokugrp $dokupath" | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | ######################### | ||
+ | # Main | ||
+ | ######################### | ||
+ | main () | ||
+ | { | ||
+ | date | ||
+ | echo "FIDs" | ||
+ | get_fids | ||
+ | echo "porterrshow" | ||
+ | porterrshow | ||
+ | echo "sendemail" | ||
+ | sendemail | ||
+ | echo "Add to wiki" | ||
+ | send_wiki | ||
+ | } | ||
+ | |||
+ | main > $logname 2>&1 | ||
+ | </cli> |