Virheenkäsittely ja lokitus komentojonoissa
Toteuttakaa vankka virheenkäsittely, uudelleenohjatkaa komentojonon tuloste ja tuottakaa merkityksellisiä lokeja komentojonon suorittamisen valvontaa ja ongelmien vianmääritystä varten.
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 (josset -eon 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 tiedostoonfile.command 2> file: Ohjaa vakiovirheen tiedostoonfile.
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.logKaikki 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 tiedostoonfileja 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!
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
- Bash-komentojonojen perusteet
- Palvelintehtävien automatisointi
- Virheenkäsittely ja lokitus komentojonoissa
- Funktiot, argumentit ja uudelleenkäytettävät skriptit