Like I said, you can use wp_cron but it will not trigger until somebody, anybody, loads the site. Otherwise you have to use a system cron job. That is just the way it is. WordPress, or any other PHP web application, doesn't run in the background all the time like a desktop applications (FireFox, Thunderbird) does. WordPress only runs with a page a loaded. Otherwise, it isn't running at all. It isn't 'sleeping'. It isn't waiting. It just isn't running at all. If it isn't running, it can't do anything. That is all there is to it.
PHP and the HTTP protocol itself are stateless. You can't run a precise cron job given those conditions. You have to wait for someone to access the site, kickstart the system, and then WordPress can check to see if 'cron' jobs should be updated. You cannot have WordPress kickstart itself every 30 minutes. You have to use some other mechanism.