Watch’ long running processes

Wed 08 July 2009

The other day I was loading a shapefile of approximately 11 million records into a PostGIS database (stay tuned for more on that later) and I wanted to know when shp2pgsql was done. Instead of continually checking the console, I decided to ‘watch’ the process using the *nix command watch. I discovered this handy tool a while ago, and have found that for long running processes, I can use watch to notify me when the process has finished, using the following command:

watch -ben 1 "ps u -C shp2pgsql"

In this case, the three parameters b, e, and n tell watch to [b]eep if the command has a non-zero exit (in this case when shp2pgsql is no longer running), [e]xit watch if the command has a non-zero exit (again when shp2pgsql is done), and the i[n]terval (in seconds) to wait between updates (in this case 1 second). The rest of the command, ps u -C is the command that watch runs each second. In this case, it uses ps to report info on the running process, where the -C flag tells ps to report the process matching the name "shp2pgsql". When shp2pgsql is no longer running, ps u -C will have a non-zero exit, and I get my beep: very handy! This can be made even more useful by changing the above command to:

watch -ben 1 "ps u -C shp2pgsql"; mail -s "Process complete!" email.address@some.one < /home/username/email_text.txt

Here I’ve added the mail command to send me an email when watch exits (the ‘;’ simply allows me to have two commands on one line). If you’re really smart, you could probably have watch save important info about the running process to a file and send this with the email, but for my purposes, the above works just fine.

The next step is figuring out how to make my computer text me when a long process is complete… and thanks to Will, I may be one step closer to this goal.

Helpful Tip

PostGIS FOSS How-To Linux

twitter

recent visitors