You get stop for free.
The lifetime of the scheduler task is more obvious.  As it is now you have to think really hard about what happens when `scheduler_task` falls out of scope.

Using a service also lets twistd control when the clock starts.  Because the LoopingCall associated with a TimerService won't be started until startService is called on that service.  Which won't happen until startService is called on the parent service (in this case `s`)