As tarefas Cron exigem que você predefinisse os horários em que elas são executadas, elas não podem (sim, você pode hackear isso com um script que edita seu crontab, mas eu não diria que é uma boa ideia) ter seu tempo de execução decidido dinamicamente. Isso significa que você basicamente tem duas opções:
1) Defina um cronjob para ser executado a cada minuto e use um arquivo temporário no qual você toca para informar a última vez que ele executou uma das tarefas agendadas Cada vez que ele é executado, ele verifica se houve uma tarefa a ser executada entre o último registro de data e hora de seu arquivo temporário e a hora atual, e se houver ele executa a tarefa. Esta é uma solução grosseira, mas simples.
2) Não use cron. Crie um daemon que verifique a que horas as tarefas precisam ser executadas e as coloque em uma fila de prioridade, então ele exibe o elemento mais antigo e dorme até a hora de executar essa tarefa. Ele executa a tarefa e a reinsere para ser executada 24 horas no futuro e se repete. Esta solução é muito mais elegante, mas também requer mais trabalho.