I have a small python script that creates a graph of data pulled from MySQL. I'm trying to figure out a way to run the script in the background all time on a regular basis. I've tried a number of things:

A Cron Job that runs the script
A loop timer
Using the & command to run the script in the background

These all have there pluses and minuses:

The Cron Job running more then every half hour seems to eat up more resources then it's worth.
The Loop timer put into the script doesn't actually put the script in the background it just keeps it running.
The Linux & command backgrounds the process but unlike a real Linux service I can't restart/stop it without killing it.

Can someone point me to a way to get the best out of all of these methods?
The cron job is probably a good approach in general, as the shell approach requires manual intervention to start it. 
A couple of suggestions: 
You could use a lock file to ensure that the cron job only ever starts one instance of the python script - often problems occur when using cron for larger jobs because it starts a second instance before the first instance has actually finished. You can do this simply by checking whether the lock file exists, then, if it does not, 'touch'ing the file at the beginning of the script and 'rm'ing it as your last action at the end of the script. If the lock file exists -- simply exit the script, as there is already one instance running. (Of course, if the script dies you will have to delete the lock file before running the script again).
Also, if excessive resource use is a problem, you can ensure that the script does not eat too many resources by giving it a low priority (prefix with, for example, nice -n 19).
How can I run my python script in the background on a schedule?