Linux-palvelinten käyttöönotto ja SSH:n hallinta · Oppitunti

Virheenkäsittely ja lokitus komentojonoissa

Toteuttakaa vankka virheenkäsittely, uudelleenohjatkaa komentojonon tuloste ja tuottakaa merkityksellisiä lokeja komentojonon suorittamisen valvontaa ja ongelmien vianmääritystä varten.

Oppitunti 3/411 vaihetta

Virheenkäsittely ja lokitus komentojonoissa on ilmainen Linux-palvelinten käyttöönotto ja SSH:n hallinta-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Linux-palvelinten käyttöönotto ja SSH:n hallinta-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Linux-palvelinten käyttöönotto ja SSH:n hallinta-kurssilla on yhteensä 4 oppituntia.

Tee skripteistäsi luotettavia

Kuvittele skriptisi suorittamassa palvelimella tärkeitä tehtäviä. Mitä tapahtuu, jos jokin menee pieleen?

  • Epäonnistuuko se kaikessa hiljaisuudessa?
  • Jättääkö se jälkeensä sotkua?
  • Voitko selvittää, milloin ja miksi se epäonnistui?

Vikasietoiset skriptit käsittelevät virheet hallitusti ja tuottavat selkeät lokit. Tässä oppitunnissa opit, miten se tehdään!

Poistumiskoodien ymmärtäminen

Jokainen Linuxin komento ja skripti palauttaa valmistuessaan poistumiskoodin (tai poistumistilan). Tämä luku kertoo, onnistuiko komento vai epäonnistuiko se.

  • 0: Tarkoittaa onnistumista! Kaikki sujui hyvin.
  • 1-255: Tarkoittaa epäonnistumista. Tietty numero voi ilmaista virheen tyypin.

Katsotaan tätä käytännössä:

#!/bin/bash
# This script demonstrates exit codes

echo "Attempting a successful command..."
ls /tmp
echo "Exit code for 'ls /tmp': $?"

echo

echo "Attempting a failing command..."
ls /nonexistent_directory
echo "Exit code for 'ls /nonexistent_directory': $?"

Komennon tilan tarkistaminen

Kun mikä tahansa komento on suoritettu, voit tarkistaa sen poistumiskoodin erityisen muuttujan $? avulla. Tämä on erittäin hyödyllistä, kun skriptissä tehdään päätöksiä.

Voit käyttää if-lausetta reagoidaksesi onnistumiseen tai epäonnistumiseen:

#!/bin/bash
# Check if a file exists before trying to read it

FILENAME="test_file.txt"
touch $FILENAME # Create it for success case

if [ -f "$FILENAME" ]; then
  echo "File '$FILENAME' exists. Processing..."
  # ... do something with the file ...
  rm $FILENAME # Clean up
else
  echo "Error: File '$FILENAME' not found!"
  exit 1
fi

echo "Script finished."

`set -e`: poistu virheen yhteydessä

Yksinkertaisissa skripteissä $?-muuttujan tarkistaminen käsin kaikkialla voi olla työlästä. Komento set -e muuttaa skriptisi toimintaa:

  • Jos jonkin komennon poistumistila on nollasta poikkeava (eli komento epäonnistuu), skripti päättyy välittömästi.
  • Tämä estää skriptiä jatkamasta suoritusta mahdollisesti vioittuneilla tiedoilla tai virheellisessä tilassa.

Kokeile suorittaa tämä skripti. Mitä tapahtuu, jos cp-komento epäonnistuu?

#!/bin/bash
set -e

echo "Starting important operations..."
mkdir my_temp_dir
cp /nonexistent_source my_temp_dir/target # This will fail

echo "This line will not be reached if cp fails."
rmdir my_temp_dir
echo "Script finished successfully."

`trap` siivousta varten

Joskus skriptin epäonnistuessakin on suoritettava siivoustoimia, kuten väliaikaisten tiedostojen poistaminen. trap-komennolla voit siepata signaaleja (kuten poistumis- tai virhesignaalin) ja suorittaa komennon.

  • EXIT: Suoritetaan, kun skripti päättyy riippumatta siitä, onnistuiko se vai epäonnistuiko se.
  • ERR: Suoritetaan, kun komennon poistumistila on nollasta poikkeava (jos set -e on käytössä).

Tässä varmistamme, että väliaikainen hakemisto poistetaan aina:

#!/bin/bash

TEMP_DIR="/tmp/my_script_temp_$(date +%s)"

function cleanup {
  echo "Cleaning up temporary directory: $TEMP_DIR"
  rm -rf "$TEMP_DIR"
}

trap cleanup EXIT

mkdir "$TEMP_DIR"
echo "Working in $TEMP_DIR..."
# Simulate some work, maybe it fails
# cp /nonexistent_file "$TEMP_DIR/" # Uncomment to test failure

echo "Script completed."

Tulosteen uudelleenohjaus

Skriptisi tulostaa usein suoritettaessa viestejä. Viestejä on pääasiassa kahta tyyppiä:

  • Vakiotuloste (stdout): Tavalliset viestit (tiedostokuvaaja 1).
  • Vakiovirhe (stderr): Virheviestit (tiedostokuvaaja 2).

Voit ohjata nämä tietovirrat näytön sijaan tiedostoihin:

  • command > file: Ohjaa vakiotulosteen tiedostoon file.
  • command 2> file: Ohjaa vakiovirheen tiedostoon file.

Tallennetaan onnistumis- ja virheviestit erikseen.

#!/bin/bash
# Redirect stdout to success.log and stderr to error.log

echo "This is a success message." > success.log
ls /nonexistent_path 2> error.log

echo "Check success.log and error.log files."
# To view them after running:
# cat success.log
# cat error.log

Kaikki tulosteet yhteen tiedostoon

Usein on hyödyllistä tallentaa sekä vakiotuloste että vakiovirhe samaan lokitiedostoon, jotta niitä on helpompi tarkastella. Tähän on pari tapaa:

  • command > file 2>&1: Ohjaa vakiotulosteen tiedostoon file ja ohjaa sitten vakiovirheen sinne, minne vakiotuloste ohjataan (tiedostoon).
  • command &> file: Lyhyempi ja uudempi syntaksi samaan tarkoitukseen.

Tämä sopii erinomaisesti kattavan lokin luomiseen skriptin suorituksesta.

#!/bin/bash
# Redirect both stdout and stderr to a single log file

LOG_FILE="combined_script.log"

echo "Starting script..." &> "$LOG_FILE"
echo "This message goes to stdout." &>> "$LOG_FILE"
ls /nonexistent_dir 2>&1 | tee -a "$LOG_FILE"
echo "Script finished." &>> "$LOG_FILE"

echo "Check the '$LOG_FILE' file for all output."

Aikaleimat lokeihin

Virheenkorjauksessa on olennaista tietää, milloin jokin tapahtuma tapahtui. Aikaleimojen lisääminen lokiviesteihin tekee niistä paljon hyödyllisempiä.

Voit lisätä nykyisen päivämäärän ja kellonajan jokaisen lokimerkinnän alkuun date-komennolla. Näin tapahtumia on helpompi seurata aikajärjestyksessä.

#!/bin/bash

LOG_FILE="timestamped_script.log"

function log_message {
  echo "$(date +%Y-%m-%d_%H:%M:%S) - $1" &>> "$LOG_FILE"
}

log_message "Script started."
sleep 1
log_message "Performing task A..."
# Simulate an error
ls /no_such_place || log_message "Error: Command failed."
sleep 1
log_message "Script finished."

echo "Check '$LOG_FILE' for timestamped entries."

Lähetä viestit järjestelmälokeihin komennolla `logger`

Tärkeät tapahtumat voidaan lähettää suoraan järjestelmän lokipalveluun (syslog). logger-komento tekee juuri tämän.

  • Järjestelmälokeja hallitaan usein työkaluilla, kuten journalctl (systemd-järjestelmissä).
  • Näin skriptisi tärkeät viestit keskitetään muiden järjestelmätapahtumien kanssa.
  • Tämä on hyödyllistä kriittisten virheiden ja auditointipolkujen yhteydessä.

logger-komennolla lähetetyt viestit löytyvät komennoilla journalctl -f tai tail -f /var/log/syslog (järjestelmästä riippuen).

#!/bin/bash
# Send a message to system logs

SCRIPT_NAME="MyBackupScript"

logger -t "$SCRIPT_NAME" "Starting daily backup operation."

# Simulate a task
sleep 2
if [ $(($RANDOM % 2)) -eq 0 ]; then
  logger -t "$SCRIPT_NAME" -p user.info "Backup successful."
else
  logger -t "$SCRIPT_NAME" -p user.err "Backup failed: Disk full."
fi

echo "Messages sent to system logs. Check with 'journalctl -t $SCRIPT_NAME'."

Virheenkäsittelyn tarkistus

Olet kirjoittanut Bash-skriptin, joka käsittelee tiedostoja. Haluat, että skripti päättyy heti, jos jokin sen sisältämä komento epäonnistuu, ja haluat myös varmistaa, että väliaikainen hakemisto siivotaan riippumatta siitä, miten skripti päättyy.

Mitä kahta Bash-komentoa käyttäisit ensisijaisesti tämän toteuttamiseen?

Kertaus ja seuraavat vaiheet

Olet oppinut tekemään Bash-skripteistä vikasietoisempia ja helpompia korjata!

  • Poistumiskoodit: Ymmärrä komentojen onnistuminen ja epäonnistuminen.
  • set -e: Lopeta suoritus automaattisesti virheen yhteydessä.
  • trap: Suorita siivoustoimia skriptin päättyessä.
  • Tulosteen uudelleenohjaus: Hallitse, minne stdout ja stderr ohjataan.
  • Aikaleimat: Lisää lokeihin kontekstia.
  • logger: Integroi skripti järjestelmänlaajuiseen lokikirjaukseen.

Näitä tekniikoita soveltamalla automatisoiduista tehtävistäsi tulee luotettavampia ja helpommin hallittavia. Jatka harjoittelua, niin rakennat todella vikasietoista automaatiota!

Aloita maksutta

Opi Linux-palvelinten käyttöönotto ja SSH:n hallinta tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Virheenkäsittely ja lokitus komentojonoissa” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Linux-palvelinten käyttöönotto ja SSH:n hallinta-oppimispolun 3 oppituntia, myös oppitunnin “Virheenkäsittely ja lokitus komentojonoissa”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Linux-palvelinten käyttöönotto ja SSH:n hallinta-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Virheenkäsittely ja lokitus komentojonoissa”?

Toteuttakaa vankka virheenkäsittely, uudelleenohjatkaa komentojonon tuloste ja tuottakaa merkityksellisiä lokeja komentojonon suorittamisen valvontaa ja ongelmien vianmääritystä varten. Harjoittelet Linux-palvelinten käyttöönotto ja SSH:n hallinta-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Linux-palvelinten käyttöönotto ja SSH:n hallinta-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Linux-palvelinten käyttöönotto ja SSH:n hallinta-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Virheenkäsittely ja lokitus komentojonoissa”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Linux-palvelinten käyttöönotto ja SSH:n hallinta-oppitunnilla?

Kyllä. Jokainen Linux-palvelinten käyttöönotto ja SSH:n hallinta-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Bash-komentojonojen perusteet
  2. Palvelintehtävien automatisointi
  3. Virheenkäsittely ja lokitus komentojonoissa
  4. Funktiot, argumentit ja uudelleenkäytettävät skriptit
← Takaisin: Linux-palvelinten käyttöönotto ja SSH:n hallinta