O que é uma maneira simples de programar um único evento para acontecer em algum momento no futuro?

15

Muitas vezes, quero que meu computador faça uma única tarefa, mas não no momento. Por exemplo, eu poderia fazer com que ele me avisasse em 30 minutos que era hora de sair do trabalho. Ou talvez eu queira que ele faça um teste complicado daqui a 2 horas, quando tenho certeza de que a maioria das pessoas já terá ido embora do escritório.

Eu sei que eu poderia criar um cron job para rodar em uma hora específica do dia, mas parece muito trabalho quando tudo que eu quero é algo simples como "Execute este script em 10 minutos", além de ter para descobrir que horas serão realmente X minutos / horas / dias a partir de agora e, em seguida, exclua a tarefa cron quando ela terminar.

Claro que posso escrever este script e executá-lo em segundo plano:

sleep X
do_task

Mas isso parece tão desajeitado: eu preciso de um novo script para cada tarefa, ou eu preciso escrever e manter um script genérico o suficiente para fazer o que eu quero, sem mencionar que eu tenho que descobrir quantos segundos os minutos, horas ou dias que eu quero.

Não existe uma solução já estabelecida para este problema?

    
por Cory Klein 03.05.2012 / 02:06

2 respostas

27

Eu uso um script simples com at :

#!/bin/bash
# email reminder notes using at(1)...

read -p "Time of message? [HH:MM] " time
read -p "Date of message? [dd.mm.yy] " date
read -p "Message body? " message

at "$time" "$date" <<EOF
echo "$message" | mailx -s "REMINDER" [email protected]
EOF

Você poderia facilmente transmitir o $message para notify-send ou dzen se quisesse uma notificação de área de trabalho em vez de um e-mail.

    
por 03.05.2012 / 02:15
6

A maneira genérica de usar at é

Escreva um script que faça o que você deseja fazer. Use o caminho completo para todos os comandos externos, registre a saída em um arquivo de log apropriado ou envie-o por correio.

Teste o script.

Ative-o com at -f YOURSCRIPT -t MMDDhhmm

    
por 03.05.2012 / 22:36