10

Вместо того, чтобы вводить «crontab -e», я случайно набрал "crontab" и застрял в середине процесса, поэтому я прервал процесс. Теперь, когда я захожу в crontab -e, он полностью пуст. Это совсем не хорошо. Если я не смогу вернуть его, мне нужно будет переписать его.

Есть ли способ:

  1. вернуть мои рабочие места в crontab? они где-то в памяти? Где находятся специфичные для учетной записи файлы crontab в linux? ИЛИ ЖЕ
  2. получите журнал всех вещей, которые сделал cron, чтобы я мог перепроектировать свой файл crontab. Я давно не смотрел на это?

5 ответов5

12

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

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

После того, как вы забили свой crontab (т. crontab -l ничего не показывает), лучшего способа вернуть его нет.

В моей системе (Ubuntu 11.04) личные crontabs хранятся в /var/spool/cron/crontabs/<USER> - но это то, что вы использовали, так что это не принесет вам пользы. (Путь может быть другим в вашей системе.)

Я вижу записи в /var/log/syslog для команд, выполняемых cron ; вы можете восстановить ваш crontab из этого (или эквивалент вашей системы, если есть), но это будет утомительно.

Вот что я делаю, чтобы избежать такой проблемы:

Я храню свой crontab в отдельном файле, который хранится в системе контроля версий. Я устанавливаю его, только запустив

crontab filename

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

4

Скрипт для полного восстановления crontab

Я сделал 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
0

Если переменная окружения EDITOR имеет значение EDITOR = vi, попробуйте

vi -r

восстановить сессию. Не записывайте напрямую сохраненный сеанс, если он у вас есть, в каталог crontab. Используйте это как руководство, чтобы воссоздать ваш crontab, используя

crontab -e

Примечание. Поскольку вы не указали ОС, Solaris и другие ОС UNIX не распознают изменения в файлах crontab, за исключением изменений, созданных с помощью crontab -e. Если я правильно помню, Linux делает.

0

Извините, но я не могу не спросить очевидное: почему бы не восстановить его из резервной копии?

Э-э, простите, я вижу, что уже было предложено.

0

Отличный ответ от @Keith Thompson - хорошая идея восстановления из /var /log /syslog!

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

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

где имя пользователя должно быть заменено пользователем, чей crontab вы хотите восстановить.

Обратите внимание, что вам может понадобиться сначала сжать содержимое ваших файлов /var/log/syslog.x.gz, если журналы были сжаты (Ubuntu архивирует syslog.2+)

Это также получит только те команды, которые все еще находятся в журналах, что будет примерно за последние 7 дней ... так что если у вас есть ежемесячное задание, которое не выполнялось ... то, вероятно, оно пропало

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .