Нууу можно разбить всю логику по полочкам, например будет 30 функций. При входе в каждую функцию писать в лог-файл для текущего профиля "время и номер функции".
Это конечно не прям "с того места, где был некорректно завершен" но довольно близко.
Перезапуск скрипта по времени
-
Запускать в режиме slient например через bat тогда процесс сам закроется после выполнения, запускать потом через планировщик.
Или просто сделать без перезапуска скрипта, поместить скрипт в вызов функции в несколько потоков и после каждого вызова функции действие спать нужное время, после сна этот главный поток начнется заново и снова вызовет функцию (если число удач >1).