Cron is the WordPress way to do it. The problem with just hooking to init is that the poor user who happens to make this request may find that the site loads really slow. I'm not 100% sure that cron is the solution because of the way this works, but it should be made asynchronous in some way, and WP cron is the usual manner.