Id personally go DB and store previous run time maybe even start/finish in a table. Bonus is you get to see how often people are kicking off the process. Tho I am in the boat of never manually kicking off scheduled processes. Expanding on this, we normally go off the start time and make sure the job hasn't run for at least x minutes which is normally double normal run time. In case process exploded and never recorded an end time. We also track wether it was a system called job or if a user kicked it off manually based off token security so we can ask why someone thought they needed to manually.