Las tareas cron requieren que preestablezcas los tiempos en los que se ejecutan, no pueden (sí, podrías hackear esto al tener un script que edite tu crontab, pero no diría que es una muy buena idea) tener su tiempo de ejecución decidido dinámicamente. Esto significa que básicamente tienes dos opciones:
1) Configure un cronjob para que se ejecute cada minuto y use un archivo temporal que toque para indicar la última vez que ejecutó una de las tareas programadas. Cada vez que se ejecuta, verifica si hubo una tarea para ejecutar entre la última marca de tiempo de su archivo temporal y la hora actual, y si existe, ejecuta la tarea. Esta es una solución asquerosa pero simple.
2) No use cron. Cree un demonio que verifique a qué horas deben ejecutarse las tareas y las coloque en una cola de prioridad, luego extraiga el primer elemento y duerma hasta que sea el momento de ejecutar esa tarea. Ejecuta la tarea y la reinserta para que se ejecute 24 horas en el futuro y se repite. Esta solución es mucho más elegante, pero también requiere más trabajo.