Adiciona uma tarefa agendada única através de um script de shell?

3

Gostaria de executar uma tarefa em um determinado momento, uma vez.

Eu sei que posso usar apenas crontab -e para adicioná-lo lá, mas eu gostaria de fazer isso através de um shellscript. crontab -e me dá algum arquivo temporário para editar, o que é imprevisível.

Além disso, assim que a tarefa for executada, eu gostaria de removê-la do crontab novamente para ter certeza de que ela não deixaria a bagunça.

Então, há uma maneira padronizada de adicionar / remover entradas do meu crontab pessoal por meio de um script?

Sei que posso criar meu próprio sistema: ter um script que execute todos os minutos que executem e excluir arquivos .sh de uma pasta e que meu script "addtask" crie arquivos .sh nessa pasta, mas antes de fazer o roteiro Pergunto-me se já existe alguma coisa.

Se for importante, eu uso o Mac OS X e o zsh, mas também quero usar algo que funcione em outros * nixes.

    
por Michael Stum 09.01.2011 / 12:34

2 respostas

14

Acho que o comando at é o que você procura depois.

Por exemplo:

echo "mail -s Test mstumm < /etc/group" | at 16:30

Isso enviará uma cópia do /etc/group às 16:30.

Você pode ler mais sobre at aqui: link

    
por 09.01.2011 / 12:59
0

Adicionando um novo trabalho cron:

newJob="/path/to/new/script.sh"
newJobSchedule="0 0 * * 0 $newJob"
cat <(crontab -l) <(echo "$newJobSchedule") | crontab -

Excluindo um trabalho antigo do cron:

oldJob="/path/to/old/script.sh"
cat <(fgrep -i -v "$oldJob" <(crontab -l)) | crontab -

Substituindo um cron job desatualizado:

oldJob="/path/to/old/script.sh"
newJob="/path/to/new/script.sh"
newJobSchedule="0 0 * * 0 $newJob"
cat <(fgrep -i -v "$oldJob" <(crontab -l)) <(echo "$newJobSchedule") | crontab -

Os arquivos temporários são evitados usando canais e redirecionamentos.

    
por 08.10.2012 / 19:49