Crontab silindi mi?


11

"Crontab -e" yazmak yerine yanlışlıkla "crontab" yazdım ve işlemin ortasında kaldım, bu yüzden işlemi iptal ettim. Şimdi crontab'a gittiğimde -e tamamen boş. Bu hiç de iyi değil. Eğer geri alamazsam, yeniden yazmam gerekecek.

Herhangi bir yolu var mı:

  1. crontab işlerimi geri aldım mı? hafızanın bir yerinde mi? Hesaba özgü Linux'ta bulunan crontab dosyaları nerede? VEYA
  2. cron'un yaptığı tüm şeylerin bir günlüğünü almak, böylece crontab dosyama ters mühendislik yapabilirim. Uzun zamandır bakmamış mıydım?

3
Sadece en son sistem yedeklemenizden geri yükleyin.
David Heffernan

Yaptığım gibi crontab -r yazdıysanız ve bu iş parçacığını bulduysanız, / var / log'dan günlükleri okuyan komutu kurtarabilirsiniz. Benim durumumda syslog.1 ihtiyacım olan her şeye sahipti
StackUnder

Yanıtlar:


14

crontabargüman olmadan standart girişten bir crontab dosyası okur. Örneğin, şunları kullanabilirsiniz:

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

Crontab'ınızı gizledikten sonra (yani crontab -lhiçbir şey göstermez), geri almanın iyi bir yolu yoktur.

Benim sistemimde (Ubuntu 11.04), kişisel crontabs saklanıyor /var/spool/cron/crontabs/<USER>- ama işte bu kadar zorlandın, bu yüzden sana hiçbir faydası olmaz. (Yol, sisteminizde farklı olabilir.)

/var/log/syslogTarafından yürütülen komutlar için girişleri görüyorum cron; crontab'ınızı bundan (veya varsa sisteminizin eşdeğerinden) yeniden yapılandırabilirsiniz, ancak sıkıcı olacaktır.

İşte bu tür bir problemden kaçınmak için yaptığım şey:

Crontab'ımı kaynak kontrol sisteminde tutulan ayrı bir dosyada saklıyorum. Bunu yüklemek sadece çalıştırarak

crontab filename

Asla kullanmam crontab -e. Yanlışlıkla crontab'ımı tıkarsam, dosyayı sadece yeniden yükleyebilirim. (Pek, neredeyse hiç; Bazen crontab -edaha sonra geçerli sürümü geri yükleyebileceğimi bilerek geçici değişiklikler yapmak için kullanıyorum .)


@mountainclimber: Kabul etmiyorum. Crontab'ınızı kaydetmek için tuşunu kullanın crontab -l > filename. Geri yüklemek için crontab filename. Sistem tarafından sağlanan arayüzü kullanın; arkanıza yaslanmayın ve sistem dosyalarını değiştirmeyin Bir kere, dosyayı güncellemek sisteme tekrar okumanızı söylemeyecektir; crontabKomut olacak. Bir diğeri için, dosyadakiler ile çıktısı arasında farklılıklar olabilir crontab -l; Ubuntu'da, dosyanın düzenlememenizi öneren bazı ekstra yorum satırları vardır.
Keith Thompson

Diğer yorumumu sileceğim. Yeni yorum: Keith yoldan bahsediyor /var/spool/cron/crontabs/<USER>. SUSE günü, benim yolum (not ekstra eğik çizgi) biraz farklıdır: /var/spool/cron/cron/tabs/<USER>. Benim gibi cron ve linux için yeni başlayanlar için söz edeceğini düşündüm. Keith'in cevabı doğrudur.
dağ tırmanışı

5

Tam crontab kurtarma için komut dosyası

Günlüğe dayanarak crontab'ınızın tam olarak kurtarılmasını sağlayan bir PHP betiği yaptım.

Kullanıcı tarafından geçen hafta çalıştırılan her cron komutunun tek bir örneğini çıkarır.

Buraya koydum

https://github.com/dangreenisrael/recover_crontab

İşte bir örnek çıktı:

perl ~/sorttv/sorttv.pl

/usr/local/bin/flexget

bash ~/scripts/sort_sports.sh

~/scripts/play_recently_added.sh

1

Üzgünüm, ama açık olanı sormaya yardımcı olamıyorum: neden yedekten geri yüklemiyorsun?

E, üzgünüm, bunun önerildiğini gördüm.


0

EDITOR envrionment değişkeniniz EDITOR = vi ise, deneyin

vi -r

oturumu kurtarmak için. Kaydedilmiş oturumu (varsa) doğrudan crontab dizininize yazmayın. Kullanarak crontab yeniden oluşturmak için bir rehber olarak kullanın

crontab -e

Not: Bir işletim sistemi belirtmediğiniz için Solaris ve diğer UNIX İşletim Sistemleri, crontab -e yoluyla oluşturulanlar dışında crontab dosyalarındaki değişiklikleri tanımıyor. Doğru hatırlıyorsam Linux anlıyor.


Kurtarılacak oturum yok; OP crontabyerine yazdı crontab -e. Cevabınızı korumak için daha iyi (IMHO) yoldan cevabımı görün.
Keith Thompson

0

@Keith Thompson'dan harika cevap - / var / log / syslog'dan yeniden yapılanma iyi fikir!

Ayrıca yanlışlıkla benim kullanıcı crontab clobbered ama aşağıdaki script-fu ile yeniden inşa edebildi

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

burada kullanıcı adı, crontab'ı yeniden oluşturmak istediğiniz kullanıcıyla değiştirilmelidir.

Günlükler sıkıştırılmışsa, önce /var/log/syslog.x.gz dosyalarınızın içeriğini doldurmanız gerekebileceğini unutmayın (ubuntu syslog.2 + 'yı sıkıştırır)

Bu ayrıca yalnızca günlüklerde olan ve son 7 gün içinde olan komutları alacaktır ... yani çalışmayan aylık bir göreviniz varsa ... muhtemelen gitti

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.