Crontab foi deletado?

10

Em vez de digitar "crontab -e" eu acidentalmente digitei "crontab" e fiquei preso no meio de um processo, então abortei o processo. Agora, quando eu vou para crontab -e é totalmente em branco. Isso não é nada bom. Se eu não conseguir recuperá-lo, precisarei reescrevê-lo.

Existe alguma maneira de:

  1. obter meus trabalhos de crontab de volta? eles estão na memória em algum lugar? Onde estão os arquivos crontab específicos da conta localizados no linux? OU
  2. obtenha um log de todas as coisas que o cron fez, para que eu possa fazer a engenharia reversa do arquivo crontab. Eu não olhei para isso há muito tempo?
por user12832 30.01.2012 / 22:00

5 respostas

12

crontab sem argumentos lê um arquivo crontab da entrada padrão. Por exemplo, você pode usar:

 echo "* * * * *  run-this-every-minute" | crontab

Depois de ter clobado o seu crontab (ou seja, crontab -l não mostra nada), não há uma boa maneira de recuperá-lo.

No meu sistema (Ubuntu 11.04), os crontabs pessoais são armazenados em /var/spool/cron/crontabs/<USER> - mas é isso que você derrotou, então isso não lhe trará nenhum benefício. (O caminho pode ser diferente no seu sistema.)

Eu vejo entradas em /var/log/syslog para comandos executados por cron ; talvez você consiga reconstruir seu crontab a partir disso (ou o equivalente do seu sistema, se houver), mas será tedioso.

Veja o que faço para evitar esse tipo de problema:

Mantenho meu crontab em um arquivo separado, mantido em um sistema de controle de origem. Eu instalo somente executando

crontab filename

Eu nunca uso crontab -e . Se eu acidentalmente estragar meu crontab, posso recarregá-lo do arquivo. (Bem, quase nunca; às vezes uso crontab -e para fazer alterações temporárias, sabendo que posso restaurar a versão atual mais tarde.)

    
por 30.01.2012 / 22:25
4

Script para recuperação completa de crontab

Eu fiz um script PHP que faz uma recuperação completa do seu crontab, baseado no log.

Ele gera uma única instância de cada comando cron executado pelo usuário na última semana.

Eu coloquei aqui

link

Aqui está um exemplo de saída:

perl ~/sorttv/sorttv.pl

/usr/local/bin/flexget

bash ~/scripts/sort_sports.sh

~/scripts/play_recently_added.sh
    
por 14.07.2013 / 11:47
0

Se a variável de envios do EDITOR for EDITOR = vi, tente

vi -r

para recuperar a sessão. Não escreva diretamente a sessão salva, se você tiver uma, seu diretório crontab. Use-o como um guia para recriar seu crontab usando

crontab -e

Nota: Como você não especificou um sistema operacional, o Solaris e outros sistemas operacionais UNIX não reconhecem mudanças nos arquivos crontab, exceto aqueles criados pelo crontab -e. Se bem me lembro, o Linux faz.

    
por 30.01.2012 / 22:25
0

Sinto muito, mas não posso deixar de perguntar o óbvio: por que não restaurá-lo a partir do backup?

Er, desculpe, vejo que isso já foi sugerido.

    
por 30.01.2012 / 22:45
0

Excelente resposta do @Keith Thompson - boa ideia reconstruir a partir do / var / log / syslog!

Eu também acidentalmente derrotei o crontab do meu usuário, mas consegui reconstruí-lo com o seguinte script-fu

mkdir ~/syslog
sudo cp /var/log/syslog* ~/syslog/
sudo chmod 777 ~/syslog/*
cat ~/syslog/* | grep "(username)" | grep -o "CMD.*" | sort | uniq

onde o nome de usuário deve ser substituído pelo usuário cujo crontab você deseja reconstruir.

Note que você pode precisar gunzip o conteúdo de seus arquivos /var/log/syslog.x.gz primeiro se os logs foram compactados (o ubuntu fecha o syslog.2 +)

Isso também só receberá comandos que ainda estão nos registros, que serão os últimos 7 dias ... então, se você tiver uma tarefa mensal que não foi executada ... provavelmente essa foi eliminada

    
por 01.08.2012 / 03:48

Tags