Qual é uma maneira simples de agendar um único evento para acontecer em algum momento no futuro?

15

Muitas vezes, quero que meu computador execute uma única tarefa, mas não agora. Por exemplo, eu poderia avisar em 30 minutos que é hora de deixar o trabalho. Ou talvez eu queira que ele execute um teste complicado daqui a duas horas, quando tenho certeza de que a maioria das pessoas sairá do escritório.

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

Claro que eu poderia escrever esse 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 preciso escrever e manter um script genérico o suficiente para fazer o que quero, sem mencionar que preciso descobrir quantos segundos são os minutos, horas ou dias que eu quero.

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

Cory Klein
fonte
7
Eu estou supondo que você não tenha executado em toda a ainda?
Jw013
isso pode parecer muito básico ... mas seu sistema não tem nenhum tipo de calendário / lista de tarefas, com avisos?
JoséNunoFerreira

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 canalizar $messagepara notify-sendou dzense quiser uma notificação na área de trabalho em vez de um email.

jasonwryan
fonte
9
Também pode usar tempo relativo ( + 2 days) e diferentes formatos ( YYYY-MM-DD). Consulte a página de manual para mais detalhes.
Arcege
Sim: us Antipodeans preferem DD-MM-AA :)
jasonwryan
Eu normalmente costumo usar scripts rápidos. Minha maneira preguiçosa favorita de agendar um trabalho é "agora +5 minutos", que também podem durar horas ou dias.
George M
+1 por script e por mencionar dzen e notify-send, dos quais eu não tinha ouvido falar.
315 Joe
O redirecionamento dzen não está funcionando para mim. unix.stackexchange.com/q/38362/4143 #
Cory Klein #
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 adequado ou envie-o por correio.

Teste o script.

Ative-o com at -f YOURSCRIPT -t MMDDhhmm

Nils
fonte