Byly zpracovány a na YouTube zveřejněny videozáznamy jednotlivých přednášek z letošního Installfestu.
Od 21. do 23. března proběhnou Arduino Days 2024. Sledovat bude možné oficiální streamy. Zúčastnit se lze i lokálních akcí. V Česku jsou aktuálně registrovány dvě: v Praze na Matfyzu a v Poličce v městské knihovně.
Letošní ročník konference LinuxDays se uskuteční o víkendu 12. a 13. října, opět se potkáme v pražských Dejvicích na FIT ČVUT. Také během letošního ročníku nás budou čekat desítky přednášek, workshopy, stánky a spousta doprovodného programu. Aktuální dění můžete sledovat na Twitteru, Facebooku nebo na Mastodonu, přidat se můžete také do telegramové diskusní skupiny.
Byla vydána nová major verze 2.0.0 a krátce na to opravné verze 2.0.1 open source online editoru Etherpad (Wikipedie) umožňujícího společné úpravy v reálném čase.
Matematický software GNU Octave byl vydán ve verzi 9.1.0. Podrobnosti v poznámkách k vydání. Nově je preferovaný grafický backend Qt a preferovaná verze Qt 6. V tomto vydání byly přepracovány funkce pro převod čísel z desítkové soustavy. Jako obvykle jsou zahrnuta také výkonnostní vylepšení a zlepšení kompatibility s Matlabem.
Společnost PINE64 stojící za telefony PinePhone nebo notebooky Pinebook publikovala na svém blogu březnový souhrn novinek. Vypíchnout lze, že pracují na virtuálním asistentu PineVox a zatím bezejmenných sluchátkách na lícní kosti (bone conduction).
Hyprland, kompozitor pro Wayland zaměřený na dláždění okny a zároveň grafické efekty, je již dva roky starý. Při té příležitosti byla vydána verze 0.37.0 (a záhy opravná 0.37.1 řešící chybu ve vykreslování oken). Nově závisí na knihovně hyprcursor, která poskytuje škálovatelné kurzory myši.
Geolokační služba Mozilla Location Service, kterou používá množství svobodného softwaru (často přes Geoclue), letos skončí. Data budou dostupná pouze do 10. dubna 2024, API klíče třetích stran budou odstraněny 12. června. Příčinou je údajné porušení patentů firmy Skyhook v roce 2019, následná dohoda omezila rozvoj MLS.
O víkendu probíhá v Praze na Karlově náměstí 13 konference Installfest 2024. Na programu je celá řada zajímavých přednášek a workshopů.
Dobrý den, potřeboval bych poradit se scriptem. Mám script pomocí kterého do souboru zapíšu [OK]. Pokud je tato podmínka splněna tak se vše ukončí se zápisem do logu. Pokud místo "echo "[OK] 2011-05-24 18:23:50" > $LOGNAME" zadám "echo "[OOOK] 2011-05-24 18:23:50" > $LOGNAME, tak vše taky proběhne tak jak má a zapíše se do error logu.
Potřeboval bych udělat to aby když bude vše OK, tak aby se mi spustil ještě jedena část a to konkrétně toto: echo "[PAIR] 2011-05-24 18:23:50" > $LOGNAME2 ale jen v případě toho že předchozí podmínka bude OK. Jinak ať se vše okončí tím že se zapíše do error logu error, ale logname2 se nevytvoří.
cat test.sh
#!/bin/bash
COMPANY="Test"
SLEEP="2"
TRIES="3"
# let it "as is" until you know what you're doing
SCRIPTNAME="$0"
SCRIPTPATH=$(cd ${SCRIPTNAME%/*} && pwd)
LOGNAME="$SCRIPTPATH/log/stop_$$.log"
LOGNAME2="$SCRIPTPATH/log/pair-_$$.log"
LASTSTATUS="$SCRIPTPATH/log/laststatus.log"
ERRLOGS="$SCRIPTPATH/log/errors"
OKLOGS="$SCRIPTPATH/log/allright"
COUNT="0"
checklog(){
if [ ! -f $1 ] ; then
return 1
elif [ $(tail -n 1 $1 | grep -c '^\[WARNING\]') -eq 1 ] ; then
return 2
elif [ $(tail -n 1 $1 | grep -c '^\[OK\]') -eq 0 ] ; then
return 1
else
return 0
fi
}
# better to run as www user and with mutt installed
[ -d $ERRLOGS ] || mkdir -p $ERRLOGS
[ -d $OKLOGS ] || mkdir -p $OKLOGS
while [ $COUNT -lt $TRIES ]; do
if ! checklog $LOGNAME ; then
# real stop
echo "[OK] 2011-05-24 18:23:50" > $LOGNAME
# take some sleep after unsuccessful run
if [ $COUNT -gt 0 ] ; then
sleep $SLEEP
fi
# raise counter
COUNT=$((COUNT + 1))
else
# break counter
COUNT=$((TRIES + 1))
fi
done
[ -f $LOGNAME ] && TAIL=$(tail -n1 $LOGNAME)
# alert mail in case of any problem (and exit)
if ! checklog $LOGNAME ; then
echo -e "$COMPANY stop was not proceeded properly: $TAIL" gzip -9 $LOGNAME
gzip -9 $LOGNAME
[ -d $ERRLOGS ] && mv $LOGNAME.gz $ERRLOGS/$(date +%Y%m%d_%H%M).gz
echo "$TAIL" > $LASTSTATUS
exit 0
fi
# delete logfile in the end of successful run
if [ -f $LOGNAME ] ; then
gzip -9 $LOGNAME
[ -d $OKLOGS ] && mv $LOGNAME.gz $OKLOGS/$(date +%Y%m%d_%H%M).gz
fi
# "OK mail" in case of successful run after previous error run
if ! checklog $LASTSTATUS ; then
echo -e "$COMPANY stop is all right now.\n\nScript exited with [OK] string. Number of tries: $TRIES. Here is last line from script: $TAIL"
fi
# log last output line to statusfile for test and "OK mail" eventually
echo "$TAIL" > $LASTSTATUS
exit 0
cat test.sh #!/bin/bash COMPANY="Test" SLEEP="2" TRIES="3" # let it "as is" until you know what you're doing SCRIPTNAME="$0" SCRIPTPATH=$(cd ${SCRIPTNAME%/*} && pwd) LOGNAME="$SCRIPTPATH/log/stop_$$.log" LOGNAME2="$SCRIPTPATH/log/pair-_$$.log" LASTSTATUS="$SCRIPTPATH/log/laststatus.log" ERRLOGS="$SCRIPTPATH/log/errors" OKLOGS="$SCRIPTPATH/log/allright" COUNT="0" checklog(){ if [ ! -f $1 ] ; then return 1 elif [ $(tail -n 1 $1 | grep -c '^\[WARNING\]') -eq 1 ] ; then return 2 elif [ $(tail -n 1 $1 | grep -c '^\[OK\]') -eq 0 ] ; then return 1 else return 0 fi } # better to run as www user and with mutt installed [ -d $ERRLOGS ] || mkdir -p $ERRLOGS [ -d $OKLOGS ] || mkdir -p $OKLOGS while [ $COUNT -lt $TRIES ]; do if ! checklog $LOGNAME ; then # real stop echo "[OK] 2011-05-24 18:23:50" > $LOGNAME echo "[PAIR] 2011-05-24 18:23:50" > $LOGNAME2 # take some sleep after unsuccessful run if [ $COUNT -gt 0 ] ; then sleep $SLEEP fi # raise counter COUNT=$((COUNT + 1)) else # break counter COUNT=$((TRIES + 1)) fi done [ -f $LOGNAME ] && TAIL=$(tail -n1 $LOGNAME) # alert mail in case of any problem (and exit) if ! checklog $LOGNAME ; then echo -e "$COMPANY stop was not proceeded properly: $TAIL" gzip -9 $LOGNAME gzip -9 $LOGNAME [ -d $ERRLOGS ] && mv $LOGNAME.gz $ERRLOGS/$(date +%Y%m%d_%H%M).gz echo "$TAIL" > $LASTSTATUS exit 0 fi # delete logfile in the end of successful run if [ -f $LOGNAME ] ; then gzip -9 $LOGNAME [ -d $OKLOGS ] && mv $LOGNAME.gz $OKLOGS/$(date +%Y%m%d_%H%M).gz fi # "OK mail" in case of successful run after previous error run if ! checklog $LASTSTATUS ; then echo -e "$COMPANY stop is all right now.\n\nScript exited with [OK] string. Number of tries: $TRIES. Here is last line from script: $TAIL" fi # log last output line to statusfile for test and "OK mail" eventually echo "$TAIL" > $LASTSTATUS exit 0priste to prosim dej jako formatovanej kod, lip se to pak cte
if ! checklog $LOGNAME ; thenMam pocit, ze tahle podminka vubec nenastane, jelikoz funkce checklog vzdy vrati hodnotu a tudiz je vzdy true ,ale mozna se pletu.
else # break counter COUNT=$((TRIES + 1))Zaprve na co cekat (?) a zadruhe je jednoduzsi pouzit
breakBtw, proc vubec pouzivat ciklus, kdyz stejne kontrolujes jen posledni radek ?
# better to run as www user and with mutt installedReally ?
# alert mail in case of any problem (and exit) if ! checklog $LOGNAME ; then # "OK mail" in case of successful run after previous error run if ! checklog $LASTSTATUS ; thenProc provadet tu samou vec trikrat, kdyz se da udelat jen nednou ?
SCRIPTNAME="$0" TRIES="3"Na co pouzivat promenne, kdyz je pouzijes jen jednou ? silenost, NN PS: pouzivet tag pre diky..
SCRIPTPATH=$(cd ${SCRIPTNAME%/*} && pwd)Coze? Tak takhle urcite ne.. NN
! checklog foo
nastane v závislosti na návratové hodnotě funkce checklog
(nula versus nenulová hodnota).
Proměnné nejí něco, co "nahrazuje věci které se dělají víckrát". Proměnné jsou i symbolická jména a rovněž mohou plnit funkci konfiguračních proměnných.
checklog
by bylo lepší volat jen jednou, možná by pomohlo něco jako:
company_exited_flawlessly=false if checklog $LOGNAME ; then company_exited_flawlessly=true else company_exited_flawlessly=false fi (nebo víc skripťácky: checklog $LOGNAME && company_exited_flawlessly=true ) if $company_exited_flawlessly; then ... else ... fia to i v jiných místech. Pro ukončení smyčky lépe použít
break
(jak radí NN).
Funkci checklog
bych zlidštil a asi i nějak přejmenoval, aby už její název evokoval, jestli se v případě úspěchu očekává 0 nebo spíš 1. Dost to pomáhá čitelnosti, zvlášť pokud výsledek ještě navíc negujete (! checklog
). Pokud by takových funkciček a podmínek bylo víc, umí to pokazit den.
log_ok(){ if [ -f $1 ] ; then if [ $(tail -n 1 $1 | grep -c '^\[OK\]') -eq 1 ] ; then return 0 fi fi return 1 } log_ok $LOGNAME && company_exited_flawlessly=trueP.S. Jestli jsem funkci
checklog
někde použil obráceně tak se omlouvám, připadá mi že ji máte opačně, ale možná že ne, takhle po ránu bych fakt potřeboval spíš log_ok $LOGNAME && company_exited_flawlessly=true
Tiskni Sdílej: