Before you implement a time-based service restart, you may wish to check that your OS and hardware (eg. firmware) are as up to date as you can reasonably make them. It strikes me as odd that you would have that instability that would require such a service restart. Do you have other services running? Are you running any sort of system monitoring that would tell you about issues with RAM or persistent storage?
With that said, I have used monit[0] in the past to bring services back up when a test fails, though never tor. Note that my go-to if I were going to implement monit would be to have a service check, and not restart on a time basis, but rather on a threshold or reachability basis. Eg. if you were going to use monit with a webapp, Id suggest you have a page in the style of
https://example.org/webapp/monit-check/ that must load the app runtime, and then have monit restart everything involved in the app if that page load takes more than 15 seconds. In your case that might look like installing nyx[1] and having a wrapper script that checks with nyx and has a non-zero exit you can have monit act on.