Em vez de digitar "crontab -e", digitei acidentalmente "crontab" e fiquei preso no meio de um processo, então abortei o processo. Agora, quando vou ao crontab -e, fica totalmente em branco. Isso não é nada bom. Se não conseguir recuperá-lo, precisarei reescrevê-lo.
Existe alguma maneira de:
- recuperar meus trabalhos de crontab? eles estão na memória em algum lugar? Onde estão os arquivos crontab específicos da conta localizados no linux? OU
- obter um log de todas as coisas que o cron fez, para que eu possa fazer engenharia reversa no meu arquivo crontab. Eu não olhava há muito tempo?
Respostas:
crontab
sem argumentos lê um arquivo crontab a partir da entrada padrão. Por exemplo, você pode usar:Depois que você derruba 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
/var/spool/cron/crontabs/<USER>
- mas é isso que você derrotou, para que não seja bom. (O caminho pode ser diferente no seu sistema.)Eu vejo entradas
/var/log/syslog
para comandos executados porcron
; você pode reconstruir seu crontab a partir disso (ou o equivalente do seu sistema, se houver), mas será tedioso.Aqui está o que eu faço para evitar esse tipo de problema:
Eu mantenho meu crontab em um arquivo separado, mantido em um sistema de controle de origem. Eu o instalo apenas executando
Eu nunca uso
crontab -e
. Se acidentalmente derrotar meu crontab, posso apenas recarregá-lo do arquivo. (Bem, quase nunca; às vezes eucrontab -e
faço alterações temporárias, sabendo que posso restaurar a versão atual posteriormente.)fonte
crontab -l > filename
. Para restaurá-locrontab filename
,. Use a interface fornecida pelo sistema; não vá pelas costas e manipule os arquivos do sistema. Por um lado, atualizar o arquivo não necessariamente indica ao sistema para relê-lo; ocrontab
comando vai. Por outro lado, pode haver diferenças entre o que está no arquivo e a saída decrontab -l
; no Ubuntu, o arquivo possui algumas linhas de comentários extras, aconselhando-o a não editá-lo./var/spool/cron/crontabs/<USER>
. No SUSE, meu caminho é um pouco diferente (nota extra barra):/var/spool/cron/cron/tabs/<USER>
. Pensei em mencionar para iniciantes o cron e o linux como eu. A resposta de Keith está correta.Script para recuperação completa do crontab
Eu criei um script PHP que faz uma recuperação completa do seu crontab, com base no log.
Ele gera uma única instância de cada comando cron executado pelo usuário na última semana.
Eu coloquei aqui
https://github.com/dangreenisrael/recover_crontab
Aqui está uma amostra de saída:
fonte
Sinto muito, mas não posso deixar de perguntar o óbvio: por que não restaurá-lo a partir do backup?
Desculpe, vejo que já foi sugerido.
fonte
Se sua variável de ambiente EDITOR for EDITOR = vi, tente
para recuperar a sessão. Não grave diretamente a sessão salva, se tiver uma, no diretório crontab. Use-o como um guia para recriar seu crontab usando
Nota: Como você não especificou um sistema operacional, o Solaris e outros sistemas operacionais UNIX não reconhecem alterações nos arquivos crontab, exceto aqueles criados por meio do crontab -e. Se bem me lembro, o Linux sim.
fonte
crontab
vez decrontab -e
. Veja minha resposta para uma maneira melhor (IMHO) de manter seu crontab.Ótima resposta de @Keith Thompson - boa idéia para reconstruir a partir de / var / log / syslog!
Eu também acidentalmente derrubei meu crontab de usuário, mas consegui reconstruí-lo com o seguinte script-fu
onde o nome de usuário deve ser substituído pelo usuário cujo crontab você deseja reconstruir.
Observe que você pode precisar compactar o conteúdo dos seus arquivos /var/log/syslog.x.gz primeiro se os logs tiverem sido compactados (o ubuntu fecha o syslog.2 +)
Isso também obterá apenas comandos que ainda estão nos logs, que durarão aproximadamente os últimos 7 dias ... portanto, se você tiver uma tarefa mensal que não foi executada ... essa provavelmente desapareceu
fonte