Crontab이 삭제 되었습니까?


11

"crontab -e"를 입력하는 대신 실수로 "crontab"을 입력하고 프로세스 중간에 멈춰 프로세스를 중단했습니다. 이제 crontab -e로 이동하면 완전히 비어 있습니다. 이것은 전혀 좋지 않습니다. 다시받을 수 없으면 다시 써야합니다.

다음과 같은 방법이 있습니까?

  1. 내 crontab 작업을 다시 받습니까? 그들은 어딘가에 기억에 있습니까? 계정 별 crontab 파일은 어디에 있습니까? 또는
  2. cron이 수행 한 모든 작업에 대한 로그를 얻으므로 crontab 파일을 리버스 엔지니어링 할 수 있습니다. 오랫동안 보지 않았습니까?

3
가장 최근의 시스템 백업에서 복원하십시오.
David Heffernan

내가했던 것처럼 crontab -r을 입력 하고이 스레드를 찾았다면 / var / log에서 로그를 읽는 명령을 복구 할 수 있습니다. 제 경우에는 syslog.1에 필요한 모든 것이있었습니다
StackUnder

답변:


14

crontab인수가 없으면 표준 입력에서 crontab 파일을 읽습니다. 예를 들어 다음을 사용할 수 있습니다.

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

당신이 crontab을 잡았다면 (즉, crontab -l아무것도 보여주지 않으면), 그것을 되 찾을 수있는 좋은 방법은 없습니다.

내 시스템 (Ubuntu 11.04)에는 개인 crontab이 저장되어 있습니다 /var/spool/cron/crontabs/<USER>.하지만 그것이 당신이 클로버 한 것이므로 아무런 효과가 없습니다. (시스템에 따라 경로가 다를 수 있습니다.)

;에 /var/log/syslog의해 실행되는 명령 에 대한 항목을 볼 수 있습니다 cron. crontab을 시스템 (또는 시스템의 경우 동등한 시스템)에서 재구성 할 수는 있지만 지루할 것입니다.

이런 종류의 문제를 피하기 위해 내가하는 일은 다음과 같습니다.

소스 제어 시스템에서 유지 관리되는 crontab을 별도의 파일로 유지합니다. 런닝 만으로 설치

crontab filename

나는 결코 사용하지 않는다 crontab -e. 실수로 crontab을 클로버하면 파일에서 다시로드 할 수 있습니다. (글쎄, 거의; 나는 때때로 crontab -e현재 버전을 나중에 복원 할 수 있다는 것을 알고 임시 변경을하기 위해 사용 합니다.)


@mountainclimber : 동의하지 않습니다. crontab을 저장하려면을 사용하십시오 crontab -l > filename. 복원하려면 crontab filename. 시스템 제공 인터페이스를 사용하십시오. 등을 뒤로 젖히고 시스템 파일을 조작하지 마십시오. 우선, 파일을 업데이트한다고해서 반드시 시스템이 파일을 다시 읽도록 요구하지는 않습니다. crontab명령 것이다. 또 다른 이유는 파일에있는 것과 출력에 차이가있을 수 있습니다 crontab -l. Ubuntu에서 파일에는 편집하지 말라고 알려주는 추가 주석 줄이 있습니다.
Keith Thompson

다른 의견을 삭제하겠습니다. 새로운 의견 : Keith가 path를 언급했습니다 /var/spool/cron/crontabs/<USER>. SUSE에서 경로는 약간 다릅니다 (추가 슬래시 참고) /var/spool/cron/cron/tabs/<USER>. 초보자가 저처럼 크론과 리눅스에 대해 언급 할 것이라고 생각했습니다. 키이스의 대답이 맞습니다.
mountainclimber

5

전체 crontab 복구를위한 스크립트

로그를 기반으로 crontab을 완전히 복구하는 PHP 스크립트를 만들었습니다.

마지막 주 동안 사용자가 실행 한 모든 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

참고 : OS를 지정하지 않았으므로 Solaris 및 기타 UNIX OS는 crontab -e를 통해 작성된 파일을 제외하고 crontab 파일의 변경 사항을 인식하지 못합니다. 내가 정확하게 기억한다면 리눅스는 그렇게합니다.


복구 할 세션이 없습니다. crontab대신 OP를 입력했습니다 crontab -e. crontab을 유지하는 더 나은 (IMHO) 방법에 대한 내 대답을 참조하십시오.
Keith Thompson

0

@Keith Thompson의 훌륭한 답변-/ var / log / syslog에서 재구성하는 것이 좋습니다!

또한 실수로 사용자 crontab을 해독했지만 다음 script-fu를 사용하여 재구성 할 수있었습니다.

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

여기서 username은 crontab을 재구성하려는 사용자로 바꿔야합니다.

로그가 압축 된 경우 /var/log/syslog.x.gz 파일의 내용을 먼저 압축해야합니다 (ubuntu는 syslog.2 +를 압축합니다).

이것은 여전히 ​​로그에 남아있는 명령 만 가져옵니다. 지난 7 일 정도입니다 ... 매달 실행되지 않은 월간 작업이 있다면 ... 아마 사라 졌을 것입니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.