En lugar de escribir "crontab -e", accidentalmente escribí "crontab" y me quedé atrapado en medio de un proceso, así que aborté el proceso. Ahora cuando voy a crontab -e está completamente en blanco. Esto no es bueno en absoluto. Si no puedo recuperarlo, tendré que volver a escribirlo.
¿Hay alguna forma de:
- recuperar mis trabajos crontab? ¿están en memoria en alguna parte? ¿Dónde están ubicados los archivos crontab específicos de la cuenta en Linux? O
- obtener un registro de todas las cosas que ha hecho cron, para que pueda realizar ingeniería inversa en mi archivo crontab. ¿No lo había mirado en mucho tiempo?
Respuestas:
crontab
sin argumentos lee un archivo crontab de la entrada estándar. Por ejemplo, puede usar:Una vez que haya golpeado su crontab (es decir,
crontab -l
no muestra nada), no hay una buena manera de recuperarlo.En mi sistema (Ubuntu 11.04), los crontabs personales se almacenan
/var/spool/cron/crontabs/<USER>
, pero eso es lo que usted aporreó, por lo que no le servirá de nada. (La ruta podría ser diferente en su sistema).Veo entradas en los
/var/log/syslog
comandos ejecutados porcron
; es posible que pueda reconstruir su crontab a partir de eso (o el equivalente de su sistema, si lo hay), pero será tedioso.Esto es lo que hago para evitar este tipo de problema:
Mantengo mi crontab en un archivo separado, mantenido en un sistema de control de fuente. Lo instalo solo ejecutando
Yo nunca uso
crontab -e
. Si accidentalmente golpeo mi crontab, puedo volver a cargarlo desde el archivo. (Bueno, casi nunca; a veces usocrontab -e
para hacer cambios temporales, sabiendo que puedo restaurar la versión actual más adelante).fuente
crontab -l > filename
. Para restaurarlo,crontab filename
. Use la interfaz proporcionada por el sistema; no te vayas detrás y manipules los archivos del sistema. Por un lado, actualizar el archivo no necesariamente le indicará al sistema que lo relea; elcrontab
comando lo hará. Por otro lado, puede haber diferencias entre lo que hay en el archivo y la salida decrontab -l
; en Ubuntu, el archivo tiene algunas líneas de comentarios adicionales que le aconsejan que no lo edite./var/spool/cron/crontabs/<USER>
. En SUSE, mi camino es ligeramente diferente (nota extra de barra):/var/spool/cron/cron/tabs/<USER>
. Pensé que lo mencionaría para los novatos en cron y linux como yo. La respuesta de Keith es correcta.Script para la recuperación completa de crontab
Hice un script PHP que hace una recuperación completa de su crontab, basado en el registro.
Produce una sola instancia de cada comando cron ejecutado por el usuario durante la última semana.
Lo puse aqui
https://github.com/dangreenisrael/recover_crontab
Aquí hay una muestra de salida:
fuente
Lo siento, pero no puedo evitar preguntar lo obvio: ¿por qué no restaurarlo desde la copia de seguridad?
Er, lo siento, veo que ya se sugirió.
fuente
Si su variable de entorno EDITOR es EDITOR = vi, intente
para recuperar la sesión No escriba directamente la sesión guardada, si la tiene, en su directorio crontab. Úselo como una guía para recrear su crontab usando
Nota: Como no especificó un sistema operativo, Solaris y otros sistemas operativos UNIX no reconocen los cambios en los archivos crontab, excepto los creados a través de crontab -e. Si no recuerdo mal, Linux sí.
fuente
crontab
más quecrontab -e
. Vea mi respuesta para una mejor manera (en mi humilde opinión) de mantener su crontab.Gran respuesta de @Keith Thompson: ¡buena idea reconstruir desde / var / log / syslog!
También accidentalmente golpeé mi crontab de usuario pero pude reconstruirlo con el siguiente script-fu
donde el nombre de usuario debe reemplazarse con el usuario cuyo crontab desea reconstruir.
Tenga en cuenta que es posible que deba comprimir el contenido de sus archivos /var/log/syslog.x.gz primero si los registros se han comprimido (ubuntu comprime syslog.2 +)
Esto también solo obtendrá comandos que todavía están en los registros, que serán aproximadamente los últimos 7 días ... así que si tiene una tarea mensual que no se ejecutó ... esa probablemente haya desaparecido
fuente