Updates per Shell Script überprüfen

SiS

SiS

Routinier
Hallo erstmal,

also ich hab bisher leider überhaupt keine richtige Erfahrung was ShellScripts angeht.

Im moment bin ich auf der Suche nach nem Script, welches auf meinem Homeserver in regelmäßigen abständen überprüft ob Updates vorhanden sind.
So was ich mir schonmal überlegt habe wie das in etwa funktionieren soll:
1. Das ganze per Cronjob in regelmäßigen Abständen aufrufen.
2. per "pacman -Sy" Paketquellen aktuallisieren und mit "pacman -Qyu" auf Updates prüfen

Bei pacman -Qyu ist die Ausgabe wie folgt:
Code:
# pacman -Qyu
Checking for package upgrades...
no upgrades found.

Oder wenn Updates verfügbar sind so:
Code:
~$ pacman -Qyu
Checking for package upgrades...

Targets (24): avahi-0.6.24-3 [0.72 MB]  coreutils-7.2-1 [4.08 MB]  glib2-2.20.1-1 [2.32 MB]  hdparm-9.14-1 [0.05 MB]  kbproto-1.0.3-2 [0.02 MB]  kernel26-2.6.29.1-3 [29.69 MB]  kernel26-firmware-2.6.29-1 [0.38 MB]
              klibc-udev-141-1 [0.10 MB]  libcap-2.16-3 [0.03 MB]  libx11-1.2.1-1 [2.73 MB]  lighttpd-1.4.22-3 [0.28 MB]  m4-1.4.13-1 [0.15 MB]  man-db-2.5.5-1 [0.68 MB]  man-pages-3.20-1 [4.32 MB]  mdadm-2.6.9-1 [0.42 MB]
              mpfr-2.4.1-1 [0.37 MB]  pacman-mirrorlist-20090405-1 [0.00 MB]  php-5.2.9-3 [8.68 MB]  samba-3.3.3-1 [22.99 MB]  smbclient-3.3.3-1 [14.65 MB]  syslog-ng-3.0.1-6 [0.82 MB]  tdb-3.3.3-1 [0.13 MB]  tzdata-2009e-1 [0.55 MB]
              udev-141-1 [0.24 MB]

Total Download Size:    0.00 MB
Total Installed Size:   282.39 MB

3. Wenn Updates verfügbar sind wird per "mail ..." eine Email an mich versendet! Möglichst mit der Ausgabe von "pacman -Qyu"


Mein Problem ist jetzt hauptsächlich die Bedinung die überprüft ob Updates verfügbar sind. Unteranderem da die Ausgabe mehrzeilig ist.
Den Rest müsste ich vermutlich noch selber hinbekommen...

PS: Kann vielleicht jemand ein Tutorial besonders empfehlen, welches sich mit dem Thema Shell-Scripting beschäftigt?
 
Code:
pacman -Qyu | grep "no upgrades found" > /dev/null 2>&1
und dann nach dem rueckgabewert $? entscheiden

wenn du die mail dann nicht noch aufhybschen willst:
Code:
pacman -Qyu | mail -s upgrades spam@example.org
 
@bitmuncher: Danke für die Links. Dabei kann ich dann auch gleich nochmal was für mein Englisch tun :)

@Rvg:
Gut Danke schonmal. Werd mal ausprobieren mir damit was zu basteln...
Ich meld mich dann nochmal jenachdem, ob es klappt oder nicht...
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

So hab mich gerade mal dran gesetzt. War ja doch gar nicht so schwer, mit dem von Rvg genannten Tipp.

So wie ich es probiert habe sollte es eigentlich laufen, muss aber noch warten bis wirklich mal Updates reinkommen.

Hab zusätzlich noch ne Abfrage reingehauen die überprüft ob schon mal ne Mail gesendet wurde:

Code:
#!/bin/bash
pacman -Sy > /dev/null
pacman -Qyu | grep "no upgrades found" > /dev/null 2>&1
if [ "$?" = "1" ]; then
        test -f updatenotifysent
        if [ "$?" = "1" ]; then
                pacman -Qyu | mail -s "[Server] Updates verfuegbar" chris@localhost
                touch updatenotifysent
        fi
else
        rm updatenotifysent
fi
 
Zuletzt bearbeitet:
So nochmal. Es funktioniert!
Hab allerdings noch eine Kleinigkeit geändert, damit mir crond nicht alle 10 minuten sagt, dass der rm Befehl nicht geklappt hat.

Code:
#!/bin/bash
pacman -Sy > /dev/null
pacman -Qyu | grep "no upgrades found" > /dev/null 2>&1
if [ "$?" = "1" ]; then
        test -f updatenotifysent
        if [ "$?" = "1" ]; then
                pacman -Qyu | mail -s "[Server] Updates verfuegbar" chris@localhost
                touch updatenotifysent
        fi
else
        test -f updatenotifysent
        if [ "$?" = "0" ]; then
                rm updatenotifysent
        fi
fi

Wenn jemand noch was findet, was man schöner machen könnte dann bitte Posten...
 
test -f updatenotifysent
if [ "$?" = "0" ]; then
rm updatenotifysent
fi

test kann auch direkt die existenz des files abfragen
so geht's auch
Code:
if [ -f updatenotifysent ] ; then
   rm updatenotifysent
fi

genauso weiter oben.
Dein Ansatz, wie er jetzt ist, funktioniert auch, aber ist etwas "umständlich", finde ich.
siehe auch
Code:
# man test
 
Tip du kannst auch die rm Fehlermeldung noch umleiten.
 

Ähnliche Themen

Modulfehler?

Ubuntu X / dbus problem

ATI-fglrx unter Ubuntu Hardy - Logoff Issue

Boot stoppt bei hda_intel: azx_get_response...

Externe Medien nicht mountbar

Zurück
Oben