2011-03-29 23 views
33

Belirtilen (klasör) bir konumda tarihli bir dosyaya çıkış için bir cronjob almaya çalışıyorum./bin/sh: Sözdizimi hatası: Sonlandırılmamış tırnak işareti

Benim crontab girdisi şöyle görünür: Ne

echo $(date "+/home/oompah/logs/%Y%m%d.test.log") 
/home/oompah/logs/20110329.test.log 

:

* * * * * /some/path/test.sh >> $(date "+/home/oompah/logs/%Y%m%d.test.log") 

Ne anlamıyorum ben konsolunda bu komutu yazdığınızda, ben doğru dize elde ediyoruz Bu hatayı neden ve nasıl tamir edebilirim?

bash sürüm bilgisi geçerli:

GNU bash, versiyon 4.1.5 (1) -salınımı (x86_64-pc-linux-gnu)

+1

http://askubuntu.com veya http://unix.stackexchange.com adresinde yer alan –

+0

@Let_Me_Be: Sizin noktanızı görebilmeme rağmen, O'nun kendisini çok ince bir şekilde yaydığı gerçek bir tehlike var. Birkaç "uzman" sitesi ile birkaç düzineden fazla ya da soruları cevaplamak için yüzlerce insanı bir araya getiriyor. Bu soru burada geçerlidir, çünkü ben basit tuttuğum halde (kısalık ve açıklık için), Cron tarafından çalıştırılan görevler olan Python ve C++ ile ilgili soruları kolayca kapsayacak şekilde genişletebiliriz. – oompahloompah

+0

Eh, bu meta için bir tartışma. –

cevap

79

Sen crontab'ınıza yüzde işaretleri excape olmalıdır:

* * * * * /some/path/test.sh >> $(date "+/home/oompah/logs/\%Y\%m\%d.test.log") 

Yüzde (%) işaretleri crontabs özel bir anlamı vardır. Yeni satır karakterleri olarak yorumlanırlar.

+1

Çok teşekkürler. Bu sorunu giderir. Vim editörü renklendirmenin dize kapatılmadığını gösterdiği için bunu daha önce fark etmeliydim. Yaa !. yine de teşekkürler, beni bir öğleden sonra frustration.m kaydettiniz :) – oompahloompah

+0

Bir şey değil. Aynı zamanda birkaç kez bu yüzde işaretleri ile mücadele ettim. Sonunda öğrendim;) – bmk

+0

Bilmek için çok yararlı - sadece bu tarafından ısırıldı! –

3

komut dosyası içinde tarih komutunu koyun. cron, sandığınız sandığı çalıştırmıyor.

+0

+1 İkiz zirvelere benzeyen ifadeler :) – user237419

+0

Neyi kastettiğimi anladığımdan emin değilim. Komut dosyasının çıktısının dosyaya gönderilmesini istiyorum. Komut dosyasını yeniden yazma olasılığını duymak istemiyorum, böylece tüm baskı ifadeleri stdout yerine dosyaya yönlendirilir - bir şeyleri kaçırmadığım sürece - - lütfen açıkla – oompahloompah

+0

Crontab'a $ (date ...) sahip olmanıza gerek yok. Test.sh.'nin içine koyun. – bmargulies

0

Scriptinizde ilk satır olarak #!/bin/bash shebang olduğundan emin olun. Ayrıca, bmargulies belirtildiği gibi, mümkünse komut dosyasının içine date komutunu koyun.

İlgili konular