Günlük cron işi çalışmıyor


10

Hızlı bir bakış: Günlük kaynak kod depomu SVN'den o gün için bir tarball'a yedekleyecek bir senaryom var. Komut dosyasını test ettim ve çıktı dizininin sahipliğinden dolayı sudo olarak çalıştırdığım sürece çok iyi çalışıyor.

Sorun şu ki bu günlük çalıştırmak istiyorum, bu yüzden /etc/cron.daily dizinine bir bağlantı koymak. Dizinin içeriği.

thom@spenser:/etc/cron.daily$ ls -l
total 60
-rwxr-xr-x 1 root root   189 2011-09-14 02:21 apport
-rwxr-xr-x 1 root root 15535 2011-10-06 11:30 apt
-rwxr-xr-x 1 root root   314 2011-08-08 16:57 aptitude
lrwxrwxrwx 1 root root    24 2012-02-28 11:05 backup -> /usr/local/bin/backup.sh
-rwxr-xr-x 1 root root   502 2011-06-08 11:48 bsdmainutils
-rwxr-xr-x 1 root root   256 2011-10-06 04:04 dpkg
-rwxr-xr-x 1 root root   372 2011-10-04 16:50 logrotate
-rwxr-xr-x 1 root root  1353 2011-07-27 07:17 man-db
-rwxr-xr-x 1 root root   606 2011-08-17 09:16 mlocate
-rwxr-xr-x 1 root root   249 2011-06-24 05:36 passwd
-rwxr-xr-x 1 root root  2417 2011-07-01 17:25 popularity-contest
-rwxr-xr-x 1 root root   383 2011-09-30 15:09 samba
-rwxr-xr-x 1 root root  3594 2011-09-19 20:07 standard
thom@spenser:/etc/cron.daily$ 

Sorun şu ki, hiçbir zaman çalışmaz. İşte bu komut dosyasının izinleri:

thom@spenser:/etc/cron.daily$ ls -l /usr/local/bin/backup.sh 
-rwxr-xr-x 1 root root 260 2012-02-28 11:03 /usr/local/bin/backup.sh

Fikirler?


2
Mümkünse, lütfen en iyi yanıtı (varsa) seçerek diğer açık sorularınızdan bazılarını kapatmayı düşünün. Kullanıcıların, sitelerini sorunlarınızla bir sonraki kişi için etkili bir araç olabilmesi için sorularını devam ettirmeleri gerekiyor. En iyi uygulamalar hakkında daha fazla bilgi için soru sorma hakkındaki SSS bölümünü okuyun .
Bruno Pereira

Yanıtlar:


37

Bunu denedim

run-parts --test /etc/cron.daily

Benim dosya update.ubuntu gelmedi bulundu. Ayrıca benim dosya bir uzantı (nokta var) olduğunu fark ettim.

Bunu düzeltmek için adımlar.

  1. Benim yeniden adlandırıldı update.ubuntu için güncelleme-ubuntu
  2. Şimdi tekrar run-parts --test /etc/cron.daily, bu sefer dosyam geldi!

1
Evet, bu benim için düzeltildi. Dosya adındaki noktaları beğenmez, myscript.sh dosyamdan myscript için dosyamı yeniden adlandırmak benim için çalıştı.
Matt Parkins

3
Bunun daha yüksek olması gerekiyor. Senaryom geleneksel "backup.sh" olarak kaydedildi. ".Sh" parçasının çıkarılması sorunu çözdü. Bir ton teşekkürler!
David

Teşekkürler! Örtük olarak günlük cron .sh dosyalarını kaldırmaya karar verdi adam / gal utanmalısın!
Sylvain

Herkese açık olmalıdır! ;-) Bu karar nedeniyle insanların toplu olarak ne kadar zaman kaybettiklerini merak ediyorum ... Ayrıca bunun iyi bir nedeni olup olmadığını merak ediyorum?
xastor

3

Birkaç şeyden biri olabilir:

Kök yolu:

Çalıştırılan komutlara bağlı olarak, aşağıdaki satırları crontab dosyalarının üstüne koyarak kök kullanıcıların PATH değişkenini genişletmeniz gerekebilir:

PATH = / usr / sbin: / usr / bin / sbin: / bin

src: https://help.ubuntu.com/community/CronHowto

Ya da sadece Komut her komutun tam yolları kullanın: /bin/lsyerine lsörneğin. ( which lsyollar için komut satırında).

Burada bildirilen dosya adında noktalar hakkında garip bir hata var . Olası görünmese de, bağlanmakta olduğunuz dosyaya genişletilebilir.

Çıktıyı yedekleme dosyasından mı kaydediyorsunuz? İlk satırda böyle bir şey koyun, hiç çalışmamasını veya çalışmamasını ancak bir noktada başarısız olup olmadığını belirlemeye yardımcı olmak için.

/bin/echo "Attempting to run backup" >> /path-to-home/backup.log

Alternatif olarak komut dosyasını doğrudan crontab dosyasına eklemeyi deneyin:

sudo -i
crontab -e
[add the next line to the file, then save and exit]
33 15 * * * /usr/local/bin/backup.sh

makine açıksa her gün 15: 30'da çalışacaktır. * * * * * kullanarak test edin ve çalışana kadar dakikada bir kez çalıştırın.


1
Komut dosyalarında mutlak yolların kullanılması önerilmez. PATH'nin ne olduğunu bilmiyorsanız, komut dosyasında kendiniz ayarlayın. Bkz crontab neden çalışmıyor
geirha

Yararlı bağlantı, teşekkürler. Tam yolların kullanılmaması için verilen neden taşınabilirliktir. Yeterince adil. Diğer bir makul çözüm, komut dosyasının başında kullandığınız komutları ve diğer yapılandırmaları tanımlamaktır: LS = / bin / ls; SRC_DIR = / home / Joe / src. Sonra $ LS $ SRC_DIR kullanın. Tanımlanan her şeyi en üstte ve tek bir yerde tutar.
Sean

Bunu okunabilirliği azaltmak için buluyorum ve çalışması gereken her yeni sistem için her COMMAND = / path / to / komutunu gözden geçirmelisiniz. Bir sistemde, ihtiyacınız olan tüm komutlar / usr / bin'de, diğer komutlar / bin'de, diğerleri / usr / bin'de olabilir. Sadece / usr / bin ve / bin'in PATH'de olması bunu sorun yaratmaz. Yan notta, değişken adları küçük harf olmalıdır, aksi takdirde özel kabuk değişkenlerini veya ortam değişkenlerini geçersiz kılma riskiyle karşı karşıya kalırsınız.
geirha

re: büyük harfli değişken adları. Bunu her zaman çok fazla düşünmeden yaptım, bunu gördüğüm ilk senaryolar nedeniyle. Ama haklısın, ters ve olumsuz bir şans yok. Bunu işaret ettiğiniz için, şimdi bu alışkanlığı kırdığınız için teşekkürler
Sean

1

Sistem günlüğünüzü;

crond: (*system*) BAD FILE MODE

dosyaların 644 ile kısıtlanması (yeterlidir):

chmod 0644 /etc/cron.d/my_crontab
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.