Make sure your cron command in cPanel or if you're ok with ssh, via the crontab -e command, is as below
* * * * * /bin/sh /home/YOURUSERNAME/public_html/cron.sh > /dev/null
In order for it to work properly, cron.php has two required changes. In your favourite text editor comment out/remove the lines
$_SERVER['SCRIPT_NAME'] = str_replace(basename(__FILE__), 'index.php', $_SERVER['SCRIPT_NAME']);
$_SERVER['SCRIPT_FILENAME'] = str_replace(basename(__FILE__), 'index.php', $_SERVER['SCRIPT_FILENAME']);
add
$_SERVER['SCRIPT_NAME'] = "cron.php";
$_SERVER['SCRIPT_FILENAME'] = "cron.php";
after
$disabledFuncs = array_map('trim', explode(',', strtolower(ini_get('disable_functions'))));
$isShellDisabled = is_array($disabledFuncs) ? in_array('shell_exec', $disabledFuncs) : true;
$isShellDisabled = (stripos(PHP_OS, 'win') === false) ? $isShellDisabled : true;
add
$isShellDisabled = true;
Magento upgrades may overwrite the cron.php file so you may have to make this edit each time you upgrade.