[Tilesathome] Script for crashing Inkscape/tilesGen.pl

Johan Ur Riise johan at riise-data.no
Thu Jul 16 23:17:38 BST 2009


On Thu, Jul 16, 2009 at 06:39:11PM +0300, Matti Viljanen wrote:
> Hi
> 
> Long time, no mailing list!
> 
> First, these scripts are for Linux only. (I never even got the Windows client working...)
> 
> I (finally!) got fed up with having to check my machine every now and then to see if some inkscape process needed to be killed or some client started because it had crashed and returned to command line.
> 
> I have written two bash scripts to workaround these problems - tilesLoop.sh and inkscapeKiller.sh. I said workaround, because the real issue is IMHO low-quality/errornous map data. They are CC-by-sa licensed, just to max out OSM compatibility ;)
> 
> The scripts can be downloaded from http://direc.wippies.net/tilesAtHomeTools.tar.gz (and the updated versions as they come, too).
> -- 
> Matti Viljanen
> matti.viljanen at wippies.com
> 
> -- 
> Saunalahti DataPaketti - tilaa nyt, saat 2 kk veloituksetta ja Nettitikun kaupan päälle!
> http://saunalahti.fi/gsm/gsmdatapaketti.php 
> 
> 
> _______________________________________________
> Tilesathome mailing list
> Tilesathome at openstreetmap.org
> http://lists.openstreetmap.org/listinfo/tilesathome

Brilliant. Some suggestions:



- remove stopfile.txt before the loop
- remove inkscapes preferences.xml in each loop, as a corrupted preferences.xml may stop tilesGen.pl 

johan at perle:~/tiles/tilesAtHomeTools$ diff -u tilesLoop.sh.old tilesLoop.sh
--- tilesLoop.sh.old	2009-07-16 22:02:00.000000000 +0200
+++ tilesLoop.sh	2009-07-16 23:52:10.000000000 +0200
@@ -49,12 +49,15 @@
 fi
 
 COUNTER=0
+rm ./stopfile.txt
 while [ ! -e "./stopfile.txt" ]
 do
 	# Increase 
 	let COUNTER=COUNTER+1
 	./tilesGen.pl loop
 
+	rm ~/.inkscape/preferences.xml
+
 	if [ ! -e "./stopfile.txt" ]
 	then
 		sleep 5
johan at perle:~/tiles/tilesAtHomeTools$ 

In inkscapeKiller.sh:

- set delay to 300 s (5 mins) as you suggest in the comment - Since the
directory in my case does not appear in the inkscape command, use
"export-area" as a regexp to decide if it is a relevant process. Rename
TAHFOLDER to TAHREGEX to reflect this.




johan at perle:~/tiles/tilesAtHomeTools$ diff -u inkscapeKiller.sh.old inkscapeKiller.sh
--- inkscapeKiller.sh.old	2009-07-16 22:04:43.000000000 +0200
+++ inkscapeKiller.sh	2009-07-17 00:04:09.000000000 +0200
@@ -49,16 +49,14 @@
 # Too long time makes no harm (except to your rendering stats!),
 # too short time kills still functioning processes.
 # My wild quess is that five minutes (300 seconds) is sure enough.
-DELAY=60
+DELAY=300
 
-# Set TAHFOLDER to the folder name your tilesGen.pl is in.
+# Set TAHREGEX to a string used in the inkscape command
 # This is used to make sure we only mind inkscape processes,
-# launched by tilesGen.pl. My full path is
-# /home/matti/tilesAtHome/tilesGen.pl
-# so I would set "tilesAtHome"
-TAHFOLDER=tilesAtHome
+# launched by tilesGen.pl.
+TAHREGEX=export-area
 
-if [ ${#TAHFOLDER} == 0 ]
+if [ ${#TAHREGEX} == 0 ]
 then
 	echo "Please configure the script first with e.g. 'nano inkscapekiller.sh'"
 	exit 1
@@ -75,7 +73,7 @@
 	DATE=$(date +%H:%M:%S)
 
 	COUNTER=0
-	for pid in `ps -o pid,cmd -C inkscape | grep $TAHFOLDER | awk '{ print $1 }'`
+	for pid in `ps -o pid,cmd -C inkscape | grep $TAHREGEX | awk '{ print $1 }'`
 	do
 		PIDS[COUNTER]=$pid
 		let COUNTER++
@@ -85,7 +83,7 @@
 	
 	for pid in ${PIDS[@]}
 	do
-		IMAGES[$pid]=`ps -p $pid -o cmd | grep $TAHFOLDER | awk '{ print $NF }'`
+		IMAGES[$pid]=`ps -p $pid -o cmd | grep $TAHREGEX | awk '{ print $NF }'`
 	done
 
 	sleep $DELAY
@@ -93,7 +91,7 @@
 	DATE=$(date +%H:%M:%S)
 	
 	COUNTER=0
-	for pid in `ps -o pid,cmd -C inkscape | grep $TAHFOLDER | awk '{ print $1 }'`
+	for pid in `ps -o pid,cmd -C inkscape | grep $TAHREGEX | awk '{ print $1 }'`
 	do
 		NEW_PIDS[COUNTER]=$pid
 		let COUNTER++
@@ -103,7 +101,7 @@
 	
 	for pid in ${PIDS[@]}
 	do
-		NEW_IMAGES[$pid]=`ps -p $pid -o cmd | grep $TAHFOLDER | awk '{ print $NF }'`
+		NEW_IMAGES[$pid]=`ps -p $pid -o cmd | grep $TAHREGEX | awk '{ print $NF }'`
 	done
 
 	for oldpid in ${PIDS[@]}
@@ -115,7 +113,7 @@
 				if [ $IMAGES[$oldpid] == $IMAGES[$newpid] ]
 				then
 					echo -n "$DATE " >> $LOGFILE
-					ps -C inkscape -o cmd | grep $TAHFOLDER >> $LOGFILE
+					ps -C inkscape -o cmd | grep $TAHREGEX >> $LOGFILE
 					echo "Killing PID $oldpid"
 					kill $oldpid
 				fi
johan at perle:~/tiles/tilesAtHomeTools$ 






More information about the Tilesathome mailing list