[eluser]mddd[/eluser]
Aha, I see. We were thinking about two slightly different things
I agree that the most simple and safe way would be to place the 'cronnable' scripts above document root. But you are right, that loses the whole CI idea.
Using "CI-style private" methods and then "un-privatising" them for the cron seems a bit of a workaround to me. I think checking in each cron-routine would be preferable to making a separate CI-flow without the underscore checking.
Keeping cron code with the rest of the code is absolutely a good idea. If a controller (lets say News) has methods like add_article, remove_article etc. it can also have a method check_for_old_articles which is meant to be run by a cron job. But yes, you would have to check inside that method to see if it really is called by a cron job and not by a user.