to by-pass the object-cache issue you can modify the wp-cron.php to:
if ( empty( $doing_wp_cron ) ) {
if ( empty( $_GET[ 'doing_wp_cron' ] ) ) {
if ( $doing_cron_transient && ( $doing_cron_transient + WP_CRON_LOCK_TIMEOUT > $local_time ) ){
return;
}
$doing_cron_transient = $doing_wp_cron = time();
set_transient( 'doing_cron', $doing_wp_cron );
} else {
$doing_wp_cron = $_GET[ 'doing_wp_cron' ];
if($_GET[ 'flush' ]) //ADDED
$doing_cron_transient = $doing_wp_cron; //ADDED
}
}
then OS level cron a call to $time = time()
https://yourdomain(s).com/wp-cron.php?doing_wp_cron=[$time]&flush=1
every 5 minutes.
This will cause the cron to continue without the transient ID and resolve back-logged tasks within an hour.