Wget çıkışını cron / dev / null konumuna yönlendiriyor


38

Phusion Passenger'ı hayatta tutmak için crontab'ımda her 5 dakikada bir aşağıdaki komutu kullanıyorum.

*/5 * * * * wget mysite.com > /dev/null 2>&1

Bunu çalıştırdığımda, siteden bir urget gerçekleştiriyor url, STDOUT / STDERR yolunu / dev / null dizinine yönlendirir. Bunu komut satırından çalıştırdığımda iyi çalışıyor ve giriş dizinimde bir index.html dosyası üretmiyor.

Cron'dan çalıştığında, her beş dakikada bir yeni bir index.html dosyası oluşturur ve beni istemediğim bir ton dizin dosyasıyla bırakır.

Sözdizimim, cron işini çalıştırmak için yanlış mı? Bir komut satırından sorunsuz çalışır, ancak cron'dan giriş dizinimde bir index.html dosyası oluşturur.

Eminim basit bir hata yapıyorum, eğer biri yardım edebilirse memnun olurum.


1
Başka bir soru, bu dosyayı komut satırından el ile çalıştırdığınızda neden oluşturulmadığıdır. Belgelerden anlayabildiğim kadarıyla wget, bir terminalden koşma ile başka türlü ilerleme çubuğunun görüntülenmesi olup olmadığı.
Barmar

Yanıtlar:


61

Böyle yapabilirsin:

*/5 * * * * wget -O /dev/null -o /dev/null example.com

İşte -Oindirilen dosyayı gönderir /dev/nullve -ogünlükleri /dev/nullyerine stderr. Bu şekilde yeniden yönlendirme gerekli değildir.


1
Teşekkürler, bu STDERR / STDOUT'a yönlendirmekten daha doğrudandır. Bunu takdir ediyorum.
nulltek

17

İçeriği gerçekten indirmeniz mi gerekiyor yoksa yalnızca 200 OK (Tamam) almanız mı gerekiyor? Sunucunun yalnızca isteği işleme koyması gerekiyorsa, neden bu --spiderargümanı kullanmıyorsunuz ?


Bu iyi bir düşünce. Gerçekten sadece 200 OK cevabına ihtiyacım var.
nulltek,

Tarafsız birisinin bunu işaret etmesini umuyordum, ama ... hangi çözümü kullandınız? Cevabım gerçekten bunu yapmak için doğru yoldur :)
Nacht - Monica

10

Aşağıdakileri kullanırdım:

/5 * * * * wget -O - mysite.com > /dev/null 2>&1

-O -Seçenek getirilen içerik Stdout'a göndermek emin olur.


4
Bunun foo > /dev/null 2>&1daha kesin olarak yazıldığına dikkat edin foo &> /dev/null.
amalloy,

3
@ amalloy Sadece içinde bash. Genellikle sh, cron'un kullandığı şey, ve işareti ve yönlendirmesi çalışmaz.
Soviero

5

Bir yorumda yalnızca "200 OK" yanıtına ihtiyacınız olduğunu söylüyorsunuz.

Bu, bunlara göre bazı ek avantajlar ile çözüm sağlar
wget -O /dev/null -o /dev/null example.com. Buradaki düşünce çıktıyı bir şekilde atmak değil, hiçbir çıktı oluşturmak değildir.

Yalnızca yanıta ihtiyacınız olduğunu, yerel dosyaya indirilen verilerin index.html dosyasının ilk önce indirilmesine gerek olmadığı anlamına gelir.
HTTP protokolünde, 'GET' komutu bir dokümanı indirmek için kullanılır . Bir belgeye, aslında belgeyi indirmek dışında her şeyi yapacak şekilde erişmek için özel bir 'HEAD' komutu vardır.
Bu görev için 'GET'i kullanırken, belge yerel olarak indirilir ve atılır. 'HEAD' kullanmak tam olarak ihtiyacınız olanı yapar, dokümanı ilk etapta aktarmaz. Her zaman tanım olarak 'GET' ile aynı sonuç kodunu döndürecektir.

Yöntemini kullanmak sözdizimi HEADile wgetbiraz garip: Biz seçeneğini kullanmanız gerekir --spider. Bu bağlamda, istediğimiz şeyi yapar - 'GET' yerine 'HEAD' olan URL'ye erişin.
Yaptığı işlem hakkında ayrıntılı bilgi vermemek -qiçin (sessiz) seçeneğini kullanabiliriz wget.

Bunu birleştirmek, wgetne stderr'e bir şey çıkartamaz ne de bir belge kaydeder.

wget -q --spider 'http://example.com/'

Çıkış kodu bize isteğin başarılı olup olmadığını söyler:

$ wget -q --spider 'http://example.com/'
$ echo $?
0
$ wget -q --spider 'http://example.com/nonexisting'
$ echo $?                                          
8

Bir komut için crontab, her iki durumda da çıktı olmaması gerçeği, bir hata çıktısını tekrar hata göstergesi olarak kullanabileceğiniz anlamına gelir.

Örnek komutunuz şuna değiştirildi:

*/5 * * * * wget -q --spider mysite.com

Bu aynı avantajlara sahiptir wget -O /dev/null -o /dev/null example.com. Ek avantaj, yerel olarak üretilen ve atılan günlük kaydı ve belge çıktısının üretilmemesidir. Ya da elbette büyük fark belgeyi indirmek ve atmaktan kaçınmaktır index.html,.


Bu yaklaşımı da seviyorum. Geri bildiriminiz ve yanıtınız için teşekkür ederiz.
nulltek,

3

Phusion Yolcusu'nu canlı tutmak için.

Sorunuz bununla ilgili olabilir, web sitesi şöyle diyor:

Hızlı ve sağlam bir web sunucusu ve uygulama sunucusu için

Bu herhangi bir sürdürme komut dosyası gerektirmemelidir.

Aksi takdirde, kasperd'ın çözümü mükemmeldir.


Yapıcı olmamakla birlikte geri bildiriminiz için teşekkür ederiz. Uygulama sunucuları başarısız olur; ancak bu genellikle kapsayıcının hatası değildir.
Felix Frank

1
Hayatta kalması için cronjobs gerektirmemesi gerektiğine katılıyorum. Ama Nginx / Yolcu ayarını araştırırken hızlı bir düzeltme oldu. Gerçekten de / dev / null 'a çıkmanın en iyi yolunu arıyordum. Yolcu olmadığında bir anda 2 dakika boyunca yolcu başarısızlığa uğradım veya takılı kaldım, bu nedenle url’yi istemek, şu an için yolcuların ateşlenmesini sağlıyor.
nulltek,

1
wgetKomutlarla hayatta kalmanın ne olduğunu anlamak iyi olurdu . Birçok durumda, mesajları canlı tutma ihtiyacı, düzeltilmesi gereken temel bir tasarım kusurunun belirtisidir. Ancak hepsi sabit olsa bile, hayatta kalmaya devam etmenin doğru çözüm olduğu birkaç durum daha olacak. Hayatta kalma mesajlarına ihtiyaç duyulmasa bile, cron işi hala bir izleme kurulumunun yararlı bir parçası olabilir.
kasperd

Bu, bir cevaptan çok bir yorum olarak daha iyi olurdu.
moopet
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.