Script: Computer tijd, verschil tussen start- en eindtijd
Geplaatst: Za 22 Mei 2021, 21:15
Soms wil je wel eens weten hoe lang een bepaald proces heeft geduurd. Op zich is het vrij makkelijk om de datum en tijd te laten afdrukken, maar als je het er wat netter uit wil laten zien komt er iets meer bij kijken. Het verschil zit in de details. En voor die details hebben we internet om uit te zoeken hoe dat precies moet.
In dit script wordt een aantal voorbeelden gegeven van datum en tijdnotatie. Ook zit er een berekening in van het verschil tussen start- en eindtijd van een proces. Met enig knip- en plakwerk kun je dit in je eigen scripts overzetten waar je daar behoefte aan hebt.
Er wordt gebruik gemaakt van logging naar een bestand. Dit wordt in je home directory geplaatst. In het script is dat /home/mogenblue. Daar moet je natuurlijk je eigen username voor in de plaats zetten.
Het script heet computer-time.sh en dit staat er in:
Dit bestand moet natuurlijk uitvoerbaar worden gemaakt voor je het kan gebruiken.
In dit script wordt een aantal voorbeelden gegeven van datum en tijdnotatie. Ook zit er een berekening in van het verschil tussen start- en eindtijd van een proces. Met enig knip- en plakwerk kun je dit in je eigen scripts overzetten waar je daar behoefte aan hebt.
Er wordt gebruik gemaakt van logging naar een bestand. Dit wordt in je home directory geplaatst. In het script is dat /home/mogenblue. Daar moet je natuurlijk je eigen username voor in de plaats zetten.
Het script heet computer-time.sh en dit staat er in:
Code: Selecteer alles
#!/bin/bash
# datum en tijd weergave met verschil in milliseconden
# uitvoer wordt naar bestand geschreven
LogFile='/home/mogenblue/log-time.txt'
#--------------------------------------------------------------------
echo .
echo .
echo .
echo .
echo . > $LogFile
echo 'Datum en tijd weergave met verschil in milliseconden' >> $LogFile
echo . >> $LogFile
echo . >> $LogFile
echo 'Datum en tijd notaties' >> $LogFile
echo . >> $LogFile
Datum=$(date +%d/%m/%Y_%H:%M:%S,%N) ; Datum=${Datum:0:23}
echo 'Datum=$(date +%d/%m/%Y_%H:%M:%S,%N) ; Datum=${Datum:0:23}' >> $LogFile
echo "$Datum" >> $LogFile
echo . >> $LogFile
Tijd=${Datum:11:12}
echo 'Tijd=${Datum:11:12}' >> $LogFile
echo "$Tijd" >> $LogFile
echo . >> $LogFile
Tijd=$(date +%d/%m/%Y_%H:%M:%S,%N) ; Tijd=${Tijd:11:12}
echo 'Tijd=$(date +%d/%m/%Y_%H:%M:%S,%N) ; Tijd=${Tijd:11:12}' >> $LogFile
echo "$Tijd" >> $LogFile
echo . >> $LogFile
echo . >> $LogFile
echo 'Bereken tijdverschil' >> $LogFile
# functie timestamp '2020-01-01 12:20:45.12345' => 1577899245123450000
timestamp() {
date '+%s%N' --date="$1"
}
stime=$(date +%H:%M:%S,%N)
# simuleer een proces dat 1 seconde duurt
sleep 1
etime=$(date +%H:%M:%S,%N)
dtime=$(( $(timestamp "$etime") - $(timestamp "$stime") )) # bereken verschil
dtime=$(echo "scale=3; $dtime / 1000000000" | bc) # afronden op 3 decimalen
dtime=$(echo ${dtime/./,}) # verwissel lokale decimale punt naar komma
printf -v dtime "%-0.3f" $dtime # plaats een nul voor waarden kleiner dan 1 seconde (,531 wordt 0,531)
echo "etime is $etime" >> $LogFile
echo "stime is $stime" >> $LogFile
echo "dtime is $dtime" >> $LogFile
echo . >> $LogFile
echo . >> $LogFile
echo 'Voorbeeld Berekening tijdverschil bij synchroniseren' >> $LogFile
echo . >> $LogFile
Datum=$(date +%Y/%m/%d_%H:%M:%S,%N) ; Datum=${Datum:0:23} ; sTijd=${Datum:11:12}
echo "$Datum: Synchroniseren over ssh, downloaden ..." >> $LogFile
# simuleer synchroniseren over ssh, downloaden
sleep 2
# synchronisatie voltooid
Datum=$(date +%Y/%m/%d_%H:%M:%S,%N) ; Datum=${Datum:0:23} ; vTijd=${Datum:11:12}
echo "$Datum: Synchronisatie downloaden voltooid." >> $LogFile
echo "." >> $LogFile
dtime=$(( $(timestamp "$vTijd") - $(timestamp "$sTijd") )) # bereken verschil
dtime=$(echo "scale=3; $dtime / 1000000000" | bc) # afronden op 3 decimalen
dtime=$(echo ${dtime/./,}) # verwissel lokale decimale punt naar komma
printf -v dtime "%-0.3f" $dtime # plaats een nul voor waarden kleiner dan 1 seconde (,531 wordt 0,531)
echo "vTijd is $vTijd" >> $LogFile
echo "sTijd is $sTijd" >> $LogFile
echo "Voltooid in $dtime s" >> $LogFile
echo "Synchronisatie voltooid in $dtime s" >> $LogFile
echo . >> $LogFile