Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: leal - 16.08.12 - klo:16.45
-
http://forum.ubuntu-fi.org/index.php?topic=43155.0
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:
#!/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
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ä?
-
Eikös tuon voisi heittää /etc/rc.local:iin? Tuo ajetaan ymmärtääkseni käynnistyksen jälkeen root-oikeuksin.
-
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).
-
Toimisiko rootin crontabissa @reboot /home/käyttäjä/päivitykset.sh ?
-
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.
-
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.
-
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ä.
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.
-
#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 (http://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 (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:
if [ testi ]; then
tehdään_jotain
fi
4) Tuo "&&" on kätevä "if...then" testin korvaaja. Joskus kuitenkin "else" selventää koodin ideaa:
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:
echo $?
Kertoo nollaa jos onnistui, jotain muuta jos ei. Kokeilepa vaikka
ls tiedoston_nimi_jota_ei_ole
ja siihen heti perään kokeilet
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.