Видалено Crontab?


11

Замість того, щоб набрати "crontab -e", я випадково набрав "crontab" і застряг у середині процесу, тому я перервав процес. Тепер, коли я переходжу до crontab -e, це абсолютно порожньо. Це зовсім не добре. Якщо я не можу отримати його назад, мені потрібно буде переписати його.

Чи є спосіб:

  1. повернути мою роботу з Crontab? вони десь в пам’яті? Де розташовані файли crontab для облікового запису в Linux? АБО
  2. отримати журнал усіх речей, які зробив cron, щоб я міг змінити інженерний файл crontab. Я давно не дивився на це?

3
Просто відновіть його з останньої резервної копії системи.
Девід Геффернан

Якщо ви ввели crontab -r, як я, і знайшли цю нитку, ви можете відновити команду, читаючи журнали з / var / log. У моєму випадку у syslog.1 було все, що мені потрібно
StackUnder

Відповіді:


14

crontabбез аргументів зчитується файл crontab зі стандартного вводу. Наприклад, ви можете використовувати:

 echo "* * * * *  run-this-every-minute" | crontab

Після того, як ви закріпили свій кронтаб (тобто crontab -lнічого не показує), немає хорошого способу повернути його.

У моїй системі (Ubuntu 11.04) зберігаються особисті копії записів /var/spool/cron/crontabs/<USER>- але це те, що ви заробляли, так що це не принесе вам користі. (Шлях може бути різним у вашій системі.)

Я бачу записи /var/log/syslogдля команд, виконаних cron; можливо, ви зможете реконструювати свій crontab з цього (або еквівалента вашої системи, якщо такий є), але це буде нудно.

Ось що я роблю, щоб уникнути подібних проблем:

Я зберігаю свій crontab в окремому файлі, який підтримується в системі управління джерелами. Встановлю його лише запустивши

crontab filename

Я ніколи не користуюся crontab -e. Якщо я випадково поклав клонт, я можу просто перезавантажити його з файлу. (Ну навряд чи коли-небудь; я іноді використовую crontab -eдля тимчасових змін, знаючи, що можу відновити поточну версію пізніше.)


@mountainclimber: Я не згоден. Щоб зберегти свій crontab, використовуйте crontab -l > filename. Щоб відновити його, crontab filename. Використовувати наданий системою інтерфейс; не йдіть за спину і не маніпулюйте системними файлами. З одного боку, оновлення файлу не обов'язково підкаже системі перечитати його; crontabкоманда буде. Для іншого, можуть бути відмінності між тим, що є у файлі, та виведенням crontab -l; У Ubuntu, у файлі є кілька додаткових рядків коментарів, які радять не редагувати його.
Кіт Томпсон

Я видалю свій інший коментар. Новий коментар: Кіт згадує шлях /var/spool/cron/crontabs/<USER>. На SUSE, мій шлях трохи відрізняється (примітка додатковий слеш) /var/spool/cron/cron/tabs/<USER>. Думав, що я згадаю це для новачків із кроном та Linux, як я. Відповідь Кіта правильна.
гірський альпініст

5

Сценарій для повного відновлення кронатобу

Я створив PHP-скрипт, який повністю відновить ваш crontab на основі журналу.

Він видає один екземпляр кожної команди cron, яку виконує користувач за останній тиждень.

Я поклав це сюди

https://github.com/dangreenisrael/recover_crontab

Ось зразок виводу:

perl ~/sorttv/sorttv.pl

/usr/local/bin/flexget

bash ~/scripts/sort_sports.sh

~/scripts/play_recently_added.sh

1

Вибачте, але я не можу не задати очевидне: чому б не відновити його з резервного копіювання?

Е, вибачте, я бачу, що це вже було запропоновано.


0

Якщо змінна вашої змінної EDITOR - EDITOR = vi, спробуйте

vi -r

відновити сеанс. Не записуйте безпосередньо збережений сеанс, якщо ви його отримали, у свій каталог crontab. Використовуйте це як посібник, щоб відтворити ваш crontab за допомогою

crontab -e

Примітка: Оскільки ви не вказали ОС, Solaris та інші ОС UNIX не розпізнають зміни у файлах crontab, крім тих, створених через crontab -e. Якщо я правильно пам’ятаю, це робить Linux.


Немає сеансу для відновлення; ОП набрав, crontabа не crontab -e. Ознайомтеся з форумом моїх відповідей краще (ІМХО) для підтримки вашого кронтабу.
Кіт Томпсон

0

Чудова відповідь від @Keith Thompson - хороша ідея реконструкції з / var / log / syslog!

Я також випадково поклав клопот на користувача, але зміг відновити його за допомогою наступного скрипту-фу

mkdir ~/syslog
sudo cp /var/log/syslog* ~/syslog/
sudo chmod 777 ~/syslog/*
cat ~/syslog/* | grep "(username)" | grep -o "CMD.*" | sort | uniq

де ім'я користувача слід замінити користувачем, чию кронову таблицю ви хочете реконструювати.

Зауважте, що вам може знадобитися спочатку згорнути вміст своїх файлів /var/log/syslog.x.gz, якщо журнали були стиснуті (ubuntu zip up syslog.2 +)

Це також отримає лише команди, які все ще знаходяться в журналах, які будуть приблизно за останні 7 днів ... тож якщо у вас є щомісячне завдання, яке не виконується ... цього, ймовірно, немає

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.