Automatisering med scripts
Kender du det at man hver dag skal ind og tjekke diverse sites ,for opdateringer til ens programmer som man bruger mest eller at disse sites ikke har en service der kan maile dig om nye releases.
Ved at lave et bash script er det muligt at få sin linux maskine til at gøre disse ting ,helt automatisk og det er faktisk ik så svært endda.
Start en konsol og SU til root ,browse hen til et dir hvor du vil have scriptet
brug cd til at browse med
[root@stargate /]# cd /kma-script
opret din fil med touch filnavn
[root@stargate kma-script]# touch kma-script
åben filen med din favorit editor
[root@stargate kma-script]# mc -e kma-script
<-------------------------------- script start -------------------------------->
#! /bin/bash
path=/mnt/winslow/uploads # sæt en variabel ,du kan kalde den hvad du vil
# hent hele sidens indhold med wget / -q = quiet -O = output to file
wget -q -O poll.log http://prdownloads.sourceforge.net/kma/
# list indholdet af outputfilen og smid unødvendige linier væk
cat poll.log | grep kma- | sed 's/ *.*kma///' | sed 's/">*.*//' > p.log
# slet outputfilen ,den skal ikke bruges mere
rm poll.log
# list indholdet af den sorterede fil og læs en linie af gangen
cat p.log |
while read line
do
# -e =exists tjekker nu om om filen findes i den satte variable+den læste linie i den sorterede fil
# den satte variabel er /mnt/winslow/uploads
if [ -e $path/$line ]
then
# hvis filen findes gives output til ingenting /dev/null hvis ik der er en kommando virker scriptet
# simpelthen ikke da der skal angives noget efter THEN og ELSE
echo "" > /dev/null
else
# hvis ikke filen findes så henter vi den med wget -q =quiet -b =background -P =output path
wget -q -b -P $path/ http://cesnet.dl.sourceforge.net/sourceforge/kma/$line > /dev/null
# her mailer vi at filen er hentet - $line giver output fra den læste fil ,dvs filnavnet
echo "Ny KMA Release :$line
http://10.0.0.3/upload/" | mail -s "New KMA Release" stargate > /dev/null
fi # if rutinen er slut
done # while rutinen er slut
rm p.log # sletter output filen
if [ -e wget-log* ] # hvis wget-log eller andre navne findes slettes de
then
rm wget-log*
fi # if rutinen er slut
exit 0 #exit scriptet
<-------------------------------- script slut -------------------------------->
du kan altid teste om scriptet virker som det skal ved at skrive
bash -x filnavn
i outputet kommer et + hvis det er ok og samtidig kan du se hvad der sker.
bare sørg for at et script aldrig giver noget output ,for ellers virker det ikke hvis du tilføjer det til
cron.
det scriptet i bund og grund gør ,er at den henter den angivne url's side og gemmer i en fil
derefter sorter den indholdet af filen og gemmer kun det vi ønsker ,derefter tjekker den ,den færdige fil ,linie for linie (hvis der er flere linier) og ser om filen findes i det dir som du angav i path
hvis ik filen fandtes så henter scriptet den selv og smider en mail afsted til en given bruger på det lokale system ,eller en mail adresse.
kommandoen sed er ret genial til at klippe erstatte ord med.
sed fungerer sådan set simpelt nok
sed 's/SØGEORD/ERSTATTE ORD/' - se mere i man sed og sed help
for at få scriptet til at virke skal det gøres eksekverbart med chmod a+x filnavn
nu kan du så kopiere scriptet over i enten cron.daily eller cron.hourly/cron.monthly
eller tilføje det til crontab med dine egne tidsindstillinger.
Dette script er bare et eksempel på noget af det man kan automatisere via scripts
brug jeres fantasi ,det er kun den der sætter grænser.
håber denne artikel kunne bruges af jer ,til at gøre nogle ting lettere eller bare lære lidt af.
PS. der er sikkert andre eller lettere måder at gøre det på ,men sådan her har jeg selv fusket mig frem til at gøre det.... jeg er på ingen måde mester i det her...
ved godt at den viste måde her skal omskrives med et par linier ,da filerne på sourceforge ikke ligger på alle mirrors og derfor vil sende en mail hvis filen findes men ikke hente den hvis den ikke ligger på det angivne mirror.
StarGate
- Log in to post comments
Kommentarer