il linguaggio Lua: prima parte

introduzione Ho sempre avuto un debole per il software leggero e snello: sara’ un retaggio di quando la memoria si misurava in Kb e lo storage era basato su… audiocassette! Lua e’ un linguaggio che incarna questa filosofia: occupa circa un centinaio di kbyte (meno di molte pagine web), ha una stupefacente rapidita’ di esecuzione, una sintassi chiara e, come bonus, gira su qualsiasi CPU per cui sia disponibile un compilatore C. ...

April 13, 2016 · Andrea Manzini

monit helper for quota monitoring in go

I want to keep under control a system where each user has an amount of filesystem quota reserved; in particular I would like to get notified if and when a user exceeds some treshold. Since I already have Monit in place in the server, I took the chance to write a small Go utility in order to retrieve the quota percentage. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 // quotachecker.go package main import ( "os" "os/exec" "regexp" "strconv" "strings" ) func main() { //a fake implementation, just for testing purpose //cmd := exec.Command("/bin/sh", "-c", "cat fakequota.txt") cmd := exec.Command("/usr/bin/repquota", "-a") stdout, err := cmd.Output() if err != nil { panic(err.Error()) } re, err := regexp.Compile("^[[:alnum:]]+\\s+--\\s+\\d+\\s+\\d+") if err != nil { panic(err.Error()) } percent_max := 0 result := strings.Split(string(stdout), "\n") for _, line := range result { match := re.MatchString(line) if !match { continue } fields := strings.Fields(line) spaceused, err := strconv.ParseInt(fields[2], 10, 64) if err != nil { panic(err.Error()) } spacetotal, err := strconv.ParseInt(fields[4], 10, 64) if err != nil { panic(err.Error()) } if spacetotal == 0 { continue } //calculate max percent used percent := int(100 * spaceused / spacetotal) if percent > percent_max { percent_max = int(percent) } } os.Exit(percent_max) } This is also an example on how to run external programs in Go and filter the output using regular expressions. ...

March 30, 2016 · Andrea Manzini

simple and easy linux job queue

Recently I have been in a situation where I needed a simple ‘batch’ job scheduler, where I could submit some long-running tasks to a server and have a ‘system’ that serialize access the execution with some basic job control facilities (remove a job from the queue, stop the processing, and so on). Linux printing subsystem is already designed to do this, and we can exploit the CUPS printing subsystem to run our “batch” jobs. ...

December 21, 2015 · Andrea Manzini

redirect output of an already running process

Long story short: you have launched your script/program but forgot to redirect the output to a file for later inspection. #!/usr/bin/python3 #sample endless running program that prints to stdout import time,datetime while True: print(datetime.datetime.now().time()) time.sleep(1) Using GNU Debugger you can re-attach to the process, then invoke the creation of a logfile and duplicate the file descriptor to make the system send the data to the new file, instead of the terminal: ...

April 24, 2015 · Andrea Manzini