Crontab çıktısı için bir günlükte kullanmak üzere bir DATE değişkeni nasıl ayarlanır?


10

Tarih gibi bazı varyasyonlarla dalga geçiyordum

DATE = $(date)

ama bu da işe yaramadı

crontab -e

CRONLOG=/tmp/log/crontab.log
DATEVAR=`date +20\%y\%m\%d_\%H\%M\%S`
* * * * * echo $DATEVAR >> /tmp/log/crontab.log
*/2 * * * * echo "$DATEVAR hello" >> ${CRONLOG}
*/1 * * * * echo 'every minute' >> ${CRONLOG}

bu sadece metni olduğu gibi çıkarır ...

Her güncellemede bir zaman damgası ile crontab.log'da bir günlük girdisi oluşturmak istiyorum

Bunu CentOS 6'da nasıl yapabilirim?

GÜNCELLEME

DATEVAR=date +20%y%m%d_%H%M%S
*/1 * * * * /bin/echo [CRON] $($(DATEVAR)) >> /tmp/log/crontab.log

denedim sadece [CRON] ve NOTHING render = /

Yanıtlar:


28

Cron bir kabuk değildir - komutları kabuğun yaptığı gibi ayrıştırmaz. Bu nedenle, değişkeniniz statik metinmiş gibi atanır.

Bu soruna bildiğim üç çözüm var:

Seçenek 1: Komutunuzu oluşturmak için bir kabuk komut dosyası kullanın, istediğiniz değişkenleri ve mantığı ekleyin - ve bu kabuk komut dosyasını cron'dan çağırın.

* * * * * /path/to/myscript.sh

myscript.sh:

DATEVAR=`date +20\%y\%m\%d_\%H\%M\%S`
echo $DATEVAR >> /tmp/crontab.log

Seçenek 2: Tarih komutunu doğrudan komutunuza ekleyin ve tüm komut kabuğa iletildiğinden, tarih işlenir ve gerçek bir tarihle değiştirilir.

* * * * * /bin/echo `date +20\%y\%m\%d_\%H\%M\%S` >> /tmp/crontab.log

Seçenek 3: Dize değişkenini cron olarak ayarlayın ve işlenecek komutunuza iletin (not - yüzde işaretlerinin kaçmasına gerek yoktur ve değişkenin kendisi ayrı bir kabukta çalıştırmak için $ () ile sarılır - backticks aynı şekilde çalışmalıdır):

DATEVAR=date +20%y%m%d_%H%M%S
* * * * * /bin/echo $($DATEVAR) >> /tmp/crontab.log

(Yukarıdaki tüm durumlarda, elbette, günlük yolu için 'sabit kodlama' yerine bir değişken kullanabilirsiniz.)


1
büyük geribildirim +1 için teşekkürler, ben crontab eklemek için çalıştı ama bunu işe yaramadı = / asla DATEVAR
qodeninja

Ben sadece bir RHEL / CentOS6 uyumlu sistemde yaptım ve beklenen sonucu verdi (yani tarih ile dosyaya yeni bir satır ekledi). Hangi seçeneği (yukarıdaki 3'ten) denediniz ve sonuç ne oldu - spesifik olun - ve / var / log / cron'da bir hata oldu mu? (komut dosyası seçeneğini kullanırsanız, a) chmod + x ve b'yi unutmayın) ilk önce kendi başına deneyin (yani cron aracılığıyla değil)
cyberx86

1
seçenek 3 =], daha önce yapmaya çalışmıştım ama render etmedi. Ama şimdi fark bir şey fark lil fark. neden $ ($ (DATE)) tutarını iki katına çıkardınız? yukarıdaki güncellememe bakın
qodeninja

1
Eklediğiniz güncellemede bir yazım hatası var - $($DATEVAR)değil $($(DATEVAR)). Bunu bu şekilde düşünün - $()- yani dış braket - braketlerdeki her şeyi işlemek için yeni bir kabuk başlatır. Bu durumda, $ DATEVAR değişkeni bir dizeye ayarlanır ve kabuğa iletilir. $(DATEVAR)hiçbir şey değildir - çünkü DATEVARhiçbir şey yoktur (yani bir değişken olarak tanımlamak için bir $ eksik mi). Ayrıca $DATEVARaynı sonucu elde etmek için backticks kullanabilirsiniz
cyberx86

yeterince adil. güncelledi. hadi bu kötü çocuğu deneyelim! - Hazaaah! lol çalıştı
qodeninja
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.