usunięto plik karty cron i trzeba go odzyskać


11

Uruchomiłem crontab -r zamiast crontab -e i usunąłem plik crontab. Nie miałem kopii zapasowej ani nowego, aby odzyskać usunięty plik.

czy to możliwe?

Dzięki,

Piotr


7
opcje edycji i usuwania nie powinny znajdować się obok siebie na klawiaturze. Zbyt łatwy błąd, by zrobić szybki typer.
einstiien

dokładnie to mi się przydarzyło.

Odpowiedzi:


9

Spróbuj spojrzeć na / var / log / cron, aby zobaczyć, co jest uruchomione, a następnie spróbuj odtworzyć crontab z tego. Jest bałagan, ale powinieneś być w stanie przywrócić wszystko, co wcześniej działało. Jednak nie tyle szczęścia dla nowszych przedmiotów. Powodzenia!


Świetne podejście!
Alex

5

Po pierwsze: zawsze rób kopie zapasowe!

Ale tak łatwo jest mieszać crontab -ri crontab -e. Właśnie to zrobiłem.

To jest to co zrobiłem:

Możesz spróbować spojrzeć na / var / log / cron i ponownie zbudować crontab.

  1. Spójrz na plik dziennika
  2. Weź pierwsze polecenie i zrób grep commandname1 /var/log/cron
  3. Dowiedz się, ile razy system uruchomił polecenie
  4. Umieść ten wpis w swoim nowym crontabie
  5. wykonać cat /var/log/cron | grep -v commandname1. Wyklucza to polecenie 1, które już uwzględniono.
  6. Weź następną komendę i grep za nią
  7. Dowiedz się, ile razy system uruchomił drugie polecenie
  8. umieść ten wpis w swoim nowym crontabie
  9. wykonać cat /var/log/cron | grep -v commandname1 | grep -v commandname2
  10. Powtarzaj, aż obejmiesz wszystkie polecenia

Teraz powinieneś również wykonać grep na starszych cronlogach, aby znaleźć zadania, które mogą być uruchamiane tylko raz w miesiącu.


1
Na Ubuntu przynajmniej (nie jestem pewien co do innych platform używających anacron / Vixie cron) dziennik jest przechowywany /var/log/syslog/*.
Timothy Gu

1
Zanim coś przypadkowo usuniesz, zawsze utwórz kopię zapasową!
Dávid Horváth,

4

Skrypt do pełnego odzyskiwania crontab

Zrobiłem skrypt PHP, który dokonuje pełnego odzyskiwania twojego crontab, na podstawie dziennika.

Wyświetla pojedyncze wystąpienie każdej komendy cron uruchomionej przez użytkownika przez ostatni tydzień.

Położyłem to tutaj

https://github.com/dangreenisrael/recover_crontab

Oto przykładowy wynik:

perl ~/sorttv/sorttv.pl

/usr/local/bin/flexget

bash ~/scripts/sort_sports.sh

~/scripts/play_recently_added.sh

1
Dlaczego podano -1? To bezpośrednia odpowiedź na pytanie.
Dan Green-Leipciger,

Korzystałem z twojego skryptu. Niesamowite, dziękuję bardzo!
MeV

Skrypt PHP nie obsługuje poprawnie poleceń zawierających nawias zamykający. Naprawiono i przeniesiono do bash:zgrep -F "($USER) CMD (" /var/log/syslog* | cut -d\( -f3- | sort -u | while read cmd ; do echo ${cmd::-1} ; done
Splitlocked

1

Masz opcje, ale żadne nie są szczególnie ładne. Jeśli nie pomyślałeś o tym, jeśli masz najnowszą wersję na komputerze deweloperskim, możesz skopiować ją stamtąd ... Mówię to tylko dlatego, że często zapominam o kopiach, które mogą znajdować się na innych komputerach, więc Zakładam, że już tego próbowałeś.

Jeśli plik jest zbyt mocno spersonalizowany, aby przebudowanie go było praktyczne, zawsze możesz wypróbować kryminalistykę niskiego poziomu. Spróbuj googlingu dla samouczków opartych na sleuthkit i UFS Explorer. Ludzie używający tych narzędzi znajdują bardzo różne stopnie pod względem łatwości użycia i wskaźników sukcesu, więc jak zwykle YMMV.


1

Ugh nie może skomentować na oryginalne pytanie, ale współpracownik właśnie pokazał mi doskonałe narzędzie: make aliasu w cokolwiek .profileużyć do crontabbyć crontab -i. -iFlag prosi o potwierdzenie przed usunięciem.

Jeśli to zrobisz crontab -e, rozpocznie się edycja jak zwykle, ale jeśli przypadkowo crontab -rzostaniesz powitany monitem o potwierdzenie.


To nie pomaga w bezpośrednim problemie ...
vonbrand,

0

Nie wydaje mi się Czas rozpocząć tworzenie kopii zapasowej tego ważnego pliku (wraz ze wszystkimi innymi w / etc / var / spool / home ...).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.