How to set a restart on a TSQL Job?
I have dealt with some long running jobs in the past and the best way I have found to identify them is to run a separate job that checks on that sort of thing.   Thomas LaRock put together a nice script that does that, and you can modify it to either email you or if you wanted you could have it just stop the job as well.   In my case, the job literally just hangs, but it is not being blocked and in fact in a lot of cases it is doing nothing at all.  But since for whatever reason it never stops the job it will never run that next schedule.

HOW TO: FIND CURRENTLY RUNNING LONG SQL AGENT JOBS

I have put his code to use and added an email notification to it for myself, and it works great.   As long as you know your threshold's for what is a long running job or even if you just want to look at an individual job, this should get it done for you.   It would be easy enough to have your code find that it is running too long and then to within the same script call 

exec msdb.dbo.sp_stop_job @job_name 'YourJobHere'


which would then allow the next schedule to pick up where this left off.  I have found that I like to see if there is anything else going on as opposed to just stopping the job but it will work either way.

Best of luck.