đã xóa tập tin tab cron và cần khôi phục nó


11

Tôi đã chạy crontab -r thay vì crontab -e và xóa tệp crontab của tôi. Tôi không có bản sao lưu và mới để khôi phục tập tin đã xóa.

Điều này có thể không?

Cảm ơn,

Peter


7
các tùy chọn chỉnh sửa và xóa không nên ở ngay cạnh nhau trên bàn phím. Quá dễ dàng một sai lầm để làm cho một ông trùm nhanh chóng.
einstiien

đó chính xác là những gì đã xảy ra với tôi

Câu trả lời:


9

Hãy thử nhìn vào / var / log / cron để xem những gì đã chạy và sau đó thử tạo lại crontab từ đó. Nó lộn xộn nhưng bạn sẽ có thể khôi phục mọi thứ đã chạy trước đó. Không có nhiều may mắn cho các mặt hàng mới hơn mặc dù. Chúc may mắn!


Cách tiếp cận tuyệt vời!
Alex

5

Trước hết: Luôn luôn sao lưu!

Nhưng, nó rất dễ dàng để trộn lên crontab -rcrontab -e. Tôi chỉ làm điều này bản thân mình.

Đó là những gì tôi đã làm:

Bạn có thể thử xem / var / log / cron và xây dựng lại crontab của bạn.

  1. Hãy nhìn vào logfile
  2. Nhận lệnh đầu tiên và làm grep commandname1 /var/log/cron
  3. Chỉ ra hệ thống đằng sau thời gian lệnh được chạy
  4. Đặt mục đó vào crontab mới của bạn
  5. thực hiện cat /var/log/cron | grep -v commandname1. Điều này sẽ loại trừ lệnh1 mà bạn đã bao phủ.
  6. Thực hiện lệnh tiếp theo và grep cho nó
  7. Chỉ ra hệ thống đằng sau thời gian lệnh thứ hai được chạy
  8. đặt mục đó vào crontab mới của bạn
  9. hành hình cat /var/log/cron | grep -v commandname1 | grep -v commandname2
  10. Lặp lại cho đến khi bạn bao gồm tất cả các lệnh

Bây giờ bạn cũng nên thực hiện grep trên các cronlog cũ hơn để tìm ra các công việc có thể chỉ được chạy một lần trong một tháng.


1
Trên Ubuntu ít nhất (không chắc chắn về các nền tảng khác sử dụng cron anacron / Vixie), nhật ký được lưu trữ /var/log/syslog/*.
Timothy Gu

1
Trước khi bạn vô tình xóa một cái gì đó, luôn luôn tạo một bản sao lưu!
Dávid Horváth

4

Kịch bản để phục hồi crontab đầy đủ

Tôi đã tạo một tập lệnh PHP thực hiện khôi phục hoàn toàn crontab của bạn, dựa trên nhật ký.

Nó xuất ra một thể hiện duy nhất của mỗi lệnh cron do người dùng chạy trong tuần trước.

Tôi đặt nó ở đây

https://github.com/dangreenisrael/recover_crontab

Đây là một đầu ra mẫu:

perl ~/sorttv/sorttv.pl

/usr/local/bin/flexget

bash ~/scripts/sort_sports.sh

~/scripts/play_recently_added.sh

1
Tại sao điều này được đưa ra -1? Đó là một câu trả lời trực tiếp cho câu hỏi.
Dan Green-ERICciger 16/07/2016

Tôi đã được sử dụng kịch bản của bạn. Thật tuyệt vời, cảm ơn bạn rất nhiều!
MeV

Kịch bản PHP không đúng với các lệnh chứa dấu ngoặc đơn đóng. Đã sửa và chuyển sang bash:zgrep -F "($USER) CMD (" /var/log/syslog* | cut -d\( -f3- | sort -u | while read cmd ; do echo ${cmd::-1} ; done
Splitlocked

1

Bạn đã có tùy chọn, nhưng không có gì đặc biệt đẹp. Trong trường hợp bạn chưa nghĩ đến nó, nếu bạn có phiên bản gần đây trên máy phát triển, bạn có thể sao chép nó từ đó ... Tôi chỉ nói rằng vì tôi thường quên các bản sao có thể có trên các máy khác, vì vậy Tôi cho rằng bạn đã thử nó.

Nếu tệp của bạn được tùy chỉnh quá nhiều để đơn giản là xây dựng lại nó thực tế, bạn luôn có thể thử một số pháp y cấp thấp. Hãy thử googling cho các hướng dẫn dựa trên sleuthkit và UFS Explorer. Những người sử dụng các công cụ này tìm thấy các mức độ khác nhau về mức độ dễ sử dụng và tỷ lệ thành công, như thường lệ, YMMV.


1

Ugh không thể viết bình luận về câu hỏi ban đầu, nhưng một đồng nghiệp chỉ cho tôi thấy một công cụ tuyệt vời: làm cho một bí danh trong bất cứ điều gì .profilebạn sử dụng cho crontabđược crontab -i. Các -ilá cờ yêu cầu xác nhận trước khi xóa.

Vì vậy, nếu bạn làm điều crontab -eđó sẽ tiến hành chỉnh sửa như bình thường, nhưng nếu bạn vô tình làm crontab -rbạn được chào đón với một dấu nhắc xác nhận.


Điều đó không giúp ích gì cho vấn đề trước mắt ...
vonbrand

0

Tôi không nghĩ vậy. Đã đến lúc bắt đầu sao lưu tệp quan trọng này (với tất cả các tệp khác trong / etc / var / spool / home ...).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.