Como executar um trabalho cron apenas uma vez?

14

Eu tenho um trabalho que dura para sempre no momento em que começa. Então, eu quero iniciá-lo apenas uma vez depois de inseri-lo no arquivo "crontab -e" e salvá-lo (ou) sempre que a reinicialização ocorrer.

Como conseguir isso?

Rama Vadakattu
fonte

Respostas:

22

Se você deseja que um comando seja executado uma vez posteriormente, use o atcomando

Se você deseja que um comando seja executado uma vez na inicialização do sistema, a solução correta é usar:

  • scripts de RC do sistema (/etc/rc.local)
  • crontab com o @rebootprefixo especial (consulte a página de manual)

Esta última é a única opção para um usuário não raiz.

MikeyB
fonte
2
+1 por mencionar @reboot.
Alex Holst
Eu sempre preferiria usar o /etc/rc.local, se possível ... Suspeito que o @reboot realmente execute comandos na inicialização crond, não na inicialização do sistema. Diferença sutil, mas possível.
11389 MikeyB
suponha que eu digitei @reboot "cmd ............." no arquivo crontab e o salvei. Esse comando começará agora? (ou) Inicia somente após a reinicialização?
Rama Vadakattu
Experimente e veja :) O que você provavelmente precisará fazer é colocá-lo no crontab e depois agendar a execução imediata usando #at now
MikeyB
Boa resposta. Eu sempre esqueço @reboot.
Bill Weiss
9

Você pode usar em (1) para executar um trabalho em algum momento no futuro. No entanto, se você quiser executar algo no boot e ele continuar rodando por si só, talvez você queira uma entrada em /etc/init.d/ para isso? Isso permitiria que você iniciasse na inicialização.

Bill Weiss
fonte
1
Você também pode usar o rc.local. Os comandos em /etc/rc.local "serão executados após todos os outros scripts de inicialização. Você pode colocar suas próprias coisas de inicialização em rc.local se não quiser fazer as coisas completas no estilo do Sys V."
1010 Joe
Joe: boa ligação.
Bill Weiss
Como parar o processo iniciado por at command? (Eu sei matar ID do processo depois de ver a lista de IDs do processo usando o comando "ps", isso também funciona para "at command"). É fácil criar scripts personalizados?
Rama Vadakattu
Sim para ambos. Todos os processos podem ser interrompidos kill(supondo que você tenha permissões para isso, o que você faz para seus próprios processos). Criar um script init é realmente fácil. Procure /etc/init.d/um script que não seja muito longo e modele o seu depois dele, ou pesquise no Google making init scripts (your distribution).
Bill Weiss
1
Muitas distros incluem um script esqueleto ( /etc/init.d/skeletonno openSuSE) que você pode adaptar para seu uso.
MikeyB
3

Um trabalho que é executado apenas uma vez e dura para sempre até que você diga para morrer é chamado de "daemon". Eles são normalmente iniciados através de scripts init em /etc/init.d/.

Se o seu trabalho terminar em algum momento e puder ser considerado um tipo único de trabalho, convém examinar o comando at. Por exemplo, se eu quisesse executar o comando find às 22:00 hoje à noite e somente isso uma vez eu faria:

$ at 10PM
at> find /root > /root/find_results.list
at> <EOT>
job 3 at 2010-02-10 22:00
Aproveite a noite
fonte
1

Dê uma olhada no comando at

Dominik
fonte
o que acontecerá quando o sistema for reiniciado? Preciso novamente digitar "at command"?
Rama Vadakattu
As entradas do comando at não serão perdidas nas reinicializações. ibm.com/developerworks/linux/library/l-job-scheduling.html é uma introdução interessante ao agendamento de tarefas
Dominik
@ Rama Vadakattu: "As entradas do comando at não serão perdidas nas reinicializações". ... que ainda não foram executados. Veja a resposta de MikeyB .
Pausado até novo aviso.
ok eu vou fazer mais pesquisas sobre isso.
Rama Vadakattu