Zamiast pisać „crontab -e” Przypadkowo wpisałem „crontab” i utknąłem w trakcie procesu, więc przerwałem proces. Teraz, gdy idę do crontab -e, jest całkowicie pusty. To wcale nie jest dobre. Jeśli nie mogę go odzyskać, będę musiał go przepisać.
Czy jest jakiś sposób na:
- odzyskać moją pracę w crontabie? czy są gdzieś w pamięci? Gdzie znajdują się pliki crontab specyficzne dla konta w systemie Linux? LUB
- otrzymuję dziennik wszystkich rzeczy, które zrobił cron, więc mogę odtworzyć mój plik crontab. Dawno na to nie patrzyłem?
Odpowiedzi:
crontab
bez argumentów odczytuje plik crontab ze standardowego wejścia. Na przykład możesz użyć:Po zablokowaniu crontab (tzn.
crontab -l
Nic nie pokazuje) nie ma dobrego sposobu na odzyskanie go.W moim systemie (Ubuntu 11.04) przechowywane są osobiste tabele crontab
/var/spool/cron/crontabs/<USER>
- ale to właśnie je zablokowałeś, więc nic ci to nie da. (Ścieżka może być inna w systemie).Widzę wpisy
/var/log/syslog
dla poleceń wykonywanych przezcron
; możesz być w stanie zrekonstruować swój crontab z tego (lub odpowiednika twojego systemu, jeśli taki istnieje), ale będzie to nużące.Oto, co robię, aby uniknąć tego rodzaju problemów:
Trzymam mój plik crontab w osobnym pliku, utrzymywanym w systemie kontroli źródła. Instaluję to tylko przez uruchomienie
Nigdy nie używam
crontab -e
. Jeśli przypadkowo zablokuję mój plik crontab, mogę po prostu ponownie go załadować z pliku. (Cóż, prawie nigdy; czasami używamcrontab -e
tymczasowych zmian, wiedząc, że później mogę przywrócić bieżącą wersję).źródło
crontab -l > filename
. Aby przywrócić gocrontab filename
. Użyj interfejsu dostarczonego przez system; nie idź za jego plecami i nie manipuluj plikami systemowymi. Po pierwsze, aktualizacja pliku niekoniecznie każe systemowi go ponownie przeczytać;crontab
komenda będzie. Po drugie, mogą występować różnice między zawartością pliku a danymi wyjściowymicrontab -l
; w systemie Ubuntu plik zawiera dodatkowe wiersze komentarza odradzające jego edytowanie./var/spool/cron/crontabs/<USER>
. Na SUSE, moja droga jest nieco inny (uwaga dodatkowy ukośnik)/var/spool/cron/cron/tabs/<USER>
. Pomyślałem, że wspomnę o tym dla początkujących cron i Linux takich jak ja. Odpowiedź Keitha jest poprawna.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:
źródło
Przykro mi, ale nie mogę przestać pytać o oczywiste: dlaczego nie przywrócić go z kopii zapasowej?
Przepraszam, widzę, że to już sugerowano.
źródło
Jeśli zmienna środowiskowa EDITOR to EDITOR = vi, spróbuj
odzyskać sesję. Nie zapisuj bezpośrednio zapisanej sesji, jeśli ją dostaniesz, do katalogu crontab. Użyj go jako przewodnika do odtworzenia pliku crontab
Uwaga: Ponieważ nie określono systemu operacyjnego, Solaris i inne systemy operacyjne UNIX nie rozpoznają zmian w plikach crontab, z wyjątkiem tych utworzonych za pomocą crontab -e. Jeśli dobrze pamiętam, Linux tak.
źródło
crontab
raczej niżcrontab -e
. Zobacz moją odpowiedź na lepszy (IMHO) sposób na utrzymanie twojego crontab.Świetna odpowiedź od @Keith Thompson - dobry pomysł na rekonstrukcję z / var / log / syslog!
Również przypadkowo zablokowałem crontab mojego użytkownika, ale udało mi się go zrekonstruować za pomocą następującego skryptu fu
gdzie nazwę użytkownika należy zastąpić użytkownikiem, którego crontab chcesz zrekonstruować.
Zauważ, że może być konieczne najpierw rozpakowanie zawartości plików /var/log/syslog.x.gz, jeśli dzienniki zostały skompresowane (ubuntu zamyka syslog.2 +)
Spowoduje to również otrzymanie poleceń, które nadal znajdują się w dziennikach, co potrwa około 7 ostatnich dni ... więc jeśli masz miesięczne zadanie, które nie zostało uruchomione ... to prawdopodobnie go nie ma
źródło