the problem I see with your approach: when you stop the scheduler, @@instance doesn't become nil, so the next time the controller needs a scheduler it will get one, the same one, which is stopped.
Most of the time, people start a scheduler in config/initializers/scheduler.rb and place it in a global var (or a singleton). That scheduler lives as long as the Ruby on Rails process lives. The controller place (or remove) jobs in the scheduler, they never stop it.