Мне больше нравится вариант с кроном, т.к. он не будет создавать лишнюю нагрузку на сервер. Просто пишется скрипт и в нужное время идет к нему обращение - очищается кэш.
Вариант с init.php мне видится примерно так: задаем время следующего запуска очистки кэша, например через COption::SetOptionInt, далее при каждом запуске получаем это значение через COption::GetOptionInt, сравниваем с текущим временем и если текущее время больше - очищаем кэш и задаем новое значение для следующего запуска. Но, как уже написал, это даст дополнительную нагрузку, пусть и не большую, но ненужную.
Вариант с init.php мне видится примерно так: задаем время следующего запуска очистки кэша, например через COption::SetOptionInt, далее при каждом запуске получаем это значение через COption::GetOptionInt, сравниваем с текущим временем и если текущее время больше - очищаем кэш и задаем новое значение для следующего запуска. Но, как уже написал, это даст дополнительную нагрузку, пусть и не большую, но ненужную.