Ce n'est pas faire une heure de lancement aléatoire qu'il faut prévoir. Enfin si, mais pas du cron, juste du script.
En clair lancer le cron toutes les heures et stocker en base de données l'heure a laquelle il doit s'exécuter.
Si l'heure actuelle correspond a celle en bdd tu lances ton script sinon tu attends.
Tu peux faire la même chose avec un compteur que tu décrémentes a chaque fois que le cron se lance. et que tu réinitialise a chaque fois que ton script se termine.
Edit: Lancer un cron toutes les heures est possible via différents sites qui proposent des système de cron.
En clair lancer le cron toutes les heures et stocker en base de données l'heure a laquelle il doit s'exécuter.
Si l'heure actuelle correspond a celle en bdd tu lances ton script sinon tu attends.
Tu peux faire la même chose avec un compteur que tu décrémentes a chaque fois que le cron se lance. et que tu réinitialise a chaque fois que ton script se termine.
Edit: Lancer un cron toutes les heures est possible via différents sites qui proposent des système de cron.