Acho que você deve considerar uma abordagem um pouco diferente: em vez de usar cron para um desligamento, use cron para exibir uma mensagem com xmessage .
Em seguida, após as ações (se houver alguma) tiradas de xmessage events (botões pressionados ou não), você inicia um encerramento.
Em outras palavras:
- em um determinado momento, exiba
xmessageviacron - se nenhuma ação for executada (botão pressionado) após um determinado tempo - desligamento
- se o botão for pressionado , retarde o desligamento com qualquer horário.
Eu escrevi algo semelhante às suas necessidades em este tópico .