Kirjoittaja Aihe: Automaattiset päivitykset -skripti  (Luettu 3317 kertaa)

leal

  • Käyttäjä
  • Viestejä: 246
    • Profiili
Automaattiset päivitykset -skripti
« : 16.08.12 - klo:16.45 »
http://forum.ubuntu-fi.org/index.php?topic=43155.0

Lainaus
Itse käyttäisin automaattisia päivityksiä mutta niissä on pari ongelmaa:

1. Ladatessa tai asentaessa ei tule mitään kuvaketta ilmoitusalueelle. Sitten ihmettelee miksi netti/kone on hidas. Tosin käytössä järjestelmäkuorman ilmaisin niin siitä näkee että jotain on tapahtumassa.

2. Kun päivitykset on asentumassa koneen voi sammuttaa normaalisti. Tämä aiheuttaa sen että pakettien hallinta voi mennä sekaisin kun asennus keskeytyy. Yhdessä 10.04 koneessa tämä taisi tapahtua.

Lisäksi kerran oli prosessori kuorma aika täysillä ja taisi päivitykset alkaa asentua, niin sitten kone meni jumiin.

Netin hidastumisen voisi ratkaista asettamalla tietyn rajan latausnopeuteen tai pitäisi tarkistaa käyttävätkö muut ohjelmat nettiä. Koneen hidastumiseen taas asennus prosessin prioriteetin pienentäminen.

Näiden ongelmien johdosta tein tälläisen skriptin:

Koodia: [Valitse]
#!/bin/bash

luku=0

#10 sekunnin odotus esim. langatonta verkkoa varten.
sleep 10

#netin testaaminen
ping -c 1 google.com && luku=5

if [ $luku = 0 ]
then
 notify-send "Tarkista nettiyhteys"
fi

if [ $luku = 5 ]
then
 notify-send "Päivitetään pakettivarastot"
 nice -n 30 sudo apt-get -o Acquire::http::Dl-Limit=400 update && luku=1
fi

if [ $luku = 10 ]
then
 notify-send "Pakettivarastojen päivitys epäonnistui"
fi

if [ $luku = 1 ]
then
 notify-send "Tarkistetaan ja/tai asennetaan päivitykset"
 nice -n 30 sudo apt-get -y -o Acquire::http::Dl-Limit=400 upgrade && luku=2
fi

if [ $luku = 2 ]
then
 notify-send "Järjestelmä on ajan tasalla"
fi

if [ $luku = 1 ]
then
 notify-send "Päivitysten asentaminen epäonnistui"
fi

Ominaisuuksia:
-Päivitykset tarkistetaan/asennetaan heti käynnistyksen jälkeen (eli konetta ei saisi sulkea heti kun avaa)
-Apt-get toimii pienemmällä prioriteetilla ja latausnopeus rajoitettu 400 Kt/s
-Nettiyhteyden tarkistus.
-10 sekunnin odotus. (katso skriptin alku)
-Skripti ilmoittaa mitä tekee Ubuntun ilmoitusalueella. (katso notify-send -kohdat)

Kannattaa muokata skripti haluamakseen (esim. latausnopeus). Voi muokata vapaasti.

Tuon skriptin ajamisen käynnistyksen yhteydessä ratkaisin tekemällä uuden kohdan käynnistettäviin sovelluksiin ja visudo-komennolla apt-getin salasana kysely pois. (Tosin tämä luo turvallisuusriskin.)

http://askubuntu.com/questions/20068/sudo-and-startup-script

Koodia: [Valitse]
käyttäjä ALL = NOPASSWD: /home/käyttäjä/päivitykset.sh, /usr/bin/apt-get
Miten käynnistyksen voisi tehdä ettei tarvitse poistaa salasanan kyselyä?
« Viimeksi muokattu: 16.08.12 - klo:16.59 kirjoittanut leal »

Elekaz

  • Käyttäjä
  • Viestejä: 92
    • Profiili
    • Piece of code
Vs: Automaattiset päivitykset -skripti
« Vastaus #1 : 16.08.12 - klo:17.56 »
Eikös tuon voisi heittää /etc/rc.local:iin? Tuo ajetaan ymmärtääkseni käynnistyksen jälkeen root-oikeuksin.

leal

  • Käyttäjä
  • Viestejä: 246
    • Profiili
Vs: Automaattiset päivitykset -skripti
« Vastaus #2 : 17.08.12 - klo:18.26 »
Nyt on rc.local:ssa tuo skripti ennen exit 0 -kohtaa. Lisäksi vaihdoin skriptin odotuksen 120 sekunttiin, mutta silti ei toimi (ei tule ilmoituksia ja apt-get:n prosessia ei näy top -komennolla).

Tomin

  • Palvelimen ylläpitäjä
  • Käyttäjä / moderaattori+
  • Viestejä: 11440
    • Profiili
    • Tomin kotisivut
Vs: Automaattiset päivitykset -skripti
« Vastaus #3 : 17.08.12 - klo:18.38 »
Toimisiko rootin crontabissa @reboot /home/käyttäjä/päivitykset.sh ?
Automaattinen allekirjoitus:
Lisäisitkö [RATKAISTU] ketjun ensimmäisen viestin aiheeseen ongelman ratkettua, kiitos.

qwertyy

  • Käyttäjä
  • Viestejä: 5671
    • Profiili
Vs: Automaattiset päivitykset -skripti
« Vastaus #4 : 17.08.12 - klo:21.20 »
Miten käy kun järjestelmä muutenkin päivittää repot automaagisesti ja tekee lisäksi skriptin joka ajetaan ruuttilaisena? Joku suorituserror tulee näkyviin....Jonnekin? Vai ajetaanko esim. repojen listausten päivitys vain turhaan tyyliin kahdesti peräkkäin. Siis olettaen että osuvat samaan aikaan suorittumaan.
« Viimeksi muokattu: 17.08.12 - klo:21.23 kirjoittanut qwertyy »

Postimies

  • Käyttäjä
  • Viestejä: 2619
    • Profiili
Vs: Automaattiset päivitykset -skripti
« Vastaus #5 : 19.08.12 - klo:05.50 »
crontab kerran viikossa yöaikaan voisi olla oikea paikka. Itse lataan lähinnä 'tärkeän' tuntuiset päivitykset. Jotakin paketteja olen poistanutkin. Jos ei printteriä tai skanneria, mitä niitä päivittelemään.

leal

  • Käyttäjä
  • Viestejä: 246
    • Profiili
Vs: Automaattiset päivitykset -skripti
« Vastaus #6 : 23.08.12 - klo:15.01 »
Miten käy kun järjestelmä muutenkin päivittää repot automaagisesti ja tekee lisäksi skriptin joka ajetaan ruuttilaisena? Joku suorituserror tulee näkyviin....Jonnekin? Vai ajetaanko esim. repojen listausten päivitys vain turhaan tyyliin kahdesti peräkkäin. Siis olettaen että osuvat samaan aikaan suorittumaan.

Juu, unohdin mainita että otin Ubuntun oman päivitysohjelman pois käytöstä.

Lainaus
Toimisiko rootin crontabissa @reboot /home/käyttäjä/päivitykset.sh ?

Tuossa apt-get taitaa toimia, mutta ilmoitukset taas ei.

http://ubuntuforums.org/showthread.php?t=1727148

Koitin muistaakseni DISPLAY=:0.0 ja xhost +local. DBUS_SESSION_BUS_ADDRESS:ia en ole vielä koittanut.

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Automaattiset päivitykset -skripti
« Vastaus #7 : 23.08.12 - klo:17.16 »
Lainaus
#netin testaaminen
ping -c 1 google.com && luku=5

if [ $luku = 0 ]
then
 notify-send "Tarkista nettiyhteys"
fi

Joitakin kommentteja:

1) Yksi pingi epäonnistuu satunnaisesti mikä on normaalia.  Tuohon kannattaisi tehdä uudelleenyritysrakenne jolloin yhteyden toiminnan arviointi on varmempaa.    Sellainen on valmiiksi rakennettu esimerkiksi "mondev" skriptiini joka on tarkoitettu monitoroimaan nettiyhteyden tai jonkin laitteen toimintaa:

www.homelinuxpc.com/download/mondev.bash

Siitä saat helposti kopioitua idean tai koko hoidon.  

2) "exit" -komennolla pääset heti ulos jos jokin epäonnistuu ilman että tarvitsee "valua läpi" kaikesta perässäolevasta koodista. Lisäksi on hyvä idea kirjoittaa tuon "exit" komennon perään numero joka ilmaisee vikatilannetta.  Yleinen tapa on laittaa siihen ykkönen ellei haluta luokitella tarkemmin mikä epäonnistui eli "exit 1".   Jos haluat luokitella tapahtuneen virheen tarkemmin niin käytä numeroita välillä 64...113, niitä ei ole varattu erikoistarkoituksiin:

http://tldp.org/LDP/abs/html/exitcodes.html

Tuosta numerosta käytetään usein nimitystä "paluukoodi" (exit code).  Tuo juontaa siitä että jos toinen ohjelma kutsuu tekemääsi ohjelmaa niin sille menee virhetilanteessa juuri tuo numero takaisin jolloin se toinen ohjelma voi päättää koodin perusteella mitä tehdään seuraavaksi.   Numero "0" tarkoittaa aina että onnistui eli nolla menee takaisin silloin.  

3)  Jos haluat kirjoittaa "then" sanan vielä samalle riville niin puolipste ja välilyönti:

Koodia: [Valitse]
if [ testi ]; then
  tehdään_jotain
fi

4)  Tuo  "&&"  on kätevä "if...then" testin korvaaja.    Joskus kuitenkin "else" selventää koodin ideaa:

Koodia: [Valitse]
if [ testi ]; then
  tehdään_jotain_1
else
  tehdää_jotain_2; exit 1
fi

Tuossa yllä selvästi "else" haara on se mitä tehdään virhetilanteessa eli poistutaan ja ilmoitetaan koodilla "1" että suteen meni.

Komentorivilläkin voit kokeilla onnistuiko viimeisin komento:

Koodia: [Valitse]
echo $?
Kertoo nollaa jos onnistui, jotain muuta jos ei.   Kokeilepa vaikka

Koodia: [Valitse]
ls tiedoston_nimi_jota_ei_ole
ja siihen heti perään kokeilet

Koodia: [Valitse]
echo $?
Itse viesteistä, jos ajat skriptiä jossain muualla kuin käyttäjä omassa päätteessä tms. niin tulee varmaan mietittäväksi miten ne viestit saadaan menemään oikeaan osoitteeseen. En tiedä vastausta, pitäisi ottaa aikaa ja kokeilla hieman miten tuo menee.
 
« Viimeksi muokattu: 23.08.12 - klo:19.04 kirjoittanut ajaaskel »
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.