I’m not sure why it never happened before; I guess I never tried to schedule a post in WordPress (since 2.7, anyway) on a Media Temple (dv) server (even though most of our clients are on Media Temple and many of them use WordPress!). Regardless, it was happening now—the infamous “missed schedule” problem.
Initially, I thought the problem was due to our staging server being secured by basic authentication. I removed it, but the problem persisted. Then I turned to the WordPress forums, but to no avail. The best answer was that it was a server configuration problem (every other suggestion seemed like a snake oil remedy). However, knowing that it was a server configuration problem didn’t really help, since I had no idea what the server configuration issue was or how to resolve it.
It turns out the answer was simple and only one Google query away:
… Media Temple’s (dv) configuration was responsible for the “Missed schedule” errors I was getting in WordPress.By default, the
/etc/hostsfile looks like this:
127.0.0.1 yourdomain.com yourdomain localhost localhost.localdomain
To execute cron tasks, WordPress needs to post to the URL
http://yourdomain.com/wp-cron.php?doing_wp_cron. This isn’t usually a problem, but with the above hosts file and Plesk's Apache configuration, that URL will actually result in a 404 error.
To resolve this, SSH into your (dv) server and run the following commands:
I to enter insert mode
Change the hosts file to read:
127.0.0.1 localhost localhost.localdomain
xxx.xxx.xxx.xxx yourdomain.com yourdomain
ESC to exit insert mode and
:wq to save your changes and exit.
That's it! There's no need to restart the server. Note—This is not necessary on Media Temple's (gs) service. Scheduling should work fine there.