Вместо того, чтобы вводить «crontab -e», я случайно набрал «crontab» и застрял в середине процесса, поэтому я прервал процесс. Теперь, когда я захожу в crontab -e, он полностью пуст. Это совсем не хорошо. Если я не могу вернуть его, мне нужно будет переписать его.
Есть ли способ:
- вернуть мои рабочие места в crontab? они где-то в памяти? Где находятся специфичные для учетной записи файлы crontab в linux? ИЛИ ЖЕ
- получите журнал всех вещей, которые сделал cron, чтобы я мог перепроектировать свой файл crontab. Я давно не смотрел на это?
Ответы:
crontab
без аргументов читает файл crontab из стандартного ввода. Например, вы можете использовать:После того, как вы забили свой crontab (то есть
crontab -l
ничего не показывает), нет хорошего способа вернуть его.В моей системе (Ubuntu 11.04) хранятся личные crontabs
/var/spool/cron/crontabs/<USER>
- но это то, что вы забили, так что это не принесет вам пользы. (Путь может быть другим в вашей системе.)Я вижу записи
/var/log/syslog
для команд, выполняемыхcron
; вы могли бы восстановить свой crontab из этого (или эквивалент вашей системы, если таковой имеется), но это будет утомительно.Вот что я делаю, чтобы избежать такой проблемы:
Я храню свой crontab в отдельном файле, который хранится в системе контроля версий. Я устанавливаю его, только запустив
Я никогда не использую
crontab -e
. Если я случайно закрою свой crontab, я могу просто перезагрузить его из файла. (Ну, почти никогда; я иногда используюcrontab -e
для внесения временных изменений, зная, что смогу восстановить текущую версию позже.)источник
crontab -l > filename
. Чтобы восстановить егоcrontab filename
. Используйте предоставляемый системой интерфейс; не ходите за его спиной и не манипулируйте системными файлами. Во-первых, обновление файла не обязательно скажет системе перечитать его;crontab
команда будет. С другой стороны, могут быть различия между тем, что находится в файле, и выводомcrontab -l
; в Ubuntu в файле есть несколько дополнительных строк комментариев, рекомендующих вам не редактировать его./var/spool/cron/crontabs/<USER>
. На SUSE, мой путь немного отличается (примечание дополнительный слэш)/var/spool/cron/cron/tabs/<USER>
. Думаю, я бы упомянул это для новичков в cron и linux, как я. Ответ Кита правильный.Скрипт для полного восстановления crontab
Я сделал PHP-скрипт, который полностью восстанавливает ваш crontab, основываясь на журнале.
Он выводит один экземпляр каждой команды cron, запущенной пользователем за последнюю неделю.
Я положил это здесь
https://github.com/dangreenisrael/recover_crontab
Вот пример вывода:
источник
Извините, но я не могу не спросить очевидное: почему бы не восстановить его из резервной копии?
Э-э, извините, я вижу, что было предложено уже.
источник
Если переменная окружения EDITOR имеет значение EDITOR = vi, попробуйте
восстановить сессию. Не записывайте напрямую сохраненный сеанс, если он у вас есть, в каталог crontab. Используйте это как руководство, чтобы воссоздать ваш crontab, используя
Примечание. Поскольку вы не указали ОС, Solaris и другие ОС UNIX не распознают изменения в файлах crontab, за исключением изменений, созданных с помощью crontab -e. Если я правильно помню, Linux делает.
источник
crontab
а неcrontab -e
. Смотрите мой ответ для лучшего (ИМХО) способа сохранить ваш crontab.Отличный ответ от @Keith Thompson - хорошая идея восстановления из / var / log / syslog!
Я также случайно забил свой пользовательский crontab, но смог восстановить его с помощью следующего скрипта-фу
где имя пользователя должно быть заменено пользователем, чей crontab вы хотите восстановить.
Обратите внимание, что вам может понадобиться сначала распаковать содержимое ваших файлов /var/log/syslog.x.gz, если журналы были сжаты (Ubuntu архивирует syslog.2 +)
Это также получит только те команды, которые все еще находятся в журналах, что будет примерно за последние 7 дней ... так что если у вас есть ежемесячное задание, которое не выполнялось ... то, вероятно, оно пропало
источник