Cronjob sözdizimimin nesi yanlış, backtick kullanmaya çalışıyorum (`)?


31

İşte otomatikleştirmek istediğim şey:

00 08 * * * psql -Uuser database < query.sql | mail somone@null.com -s "query for `date +%Y-%m-%dZ%I:%M`"

İşte hata mesajı:

/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file

2
Verme hatası dışında bunu bir schell betiğine koymayı düşünün. Bu crontab sakar görünüyor ve sen komut dosyası için yorum ve config ekleyebilirsiniz.
PeterMmm

Yanıtlar:


67

Gönderen crontab (5) :

`` Altıncı '' alanı (satırın geri kalanı) çalıştırılacak komutu belirtir. Satırın yeni komut satırına veya% karaktere kadar olan komut bölümünün tamamı / bin / sh veya crontab dosyasının SHELL değişkeninde belirtilen kabuk tarafından gerçekleştirilir. Komuttaki yüzde işaretleri (%), ters eğik çizgi () ile kaçılmadıkça, yeni satır karakterlerine dönüştürülecek ve ilk% 'den sonraki tüm veriler komuta standart girdi olarak gönderilecektir. Tek bir komut satırını kabuğun "\" izleri gibi birden çok satıra bölmenin yolu yoktur.

Sadece% işaretinden önce ters eğik çizgi ekleyin:

00 08 * * * psql -Uuser database < query.sql | mail somone@null.com -s "query for `date +\%Y-\%m-\%dZ\%I:\%M`"

8

Sorunu çözmek için% karakterden kaçın . date +%Y-%m-%dolmalıdate +\%Y-\%m-\%d

Maalesef bu cevap biraz gecikmiş fakat sorunlar PATH ya da geri tepme değil - mesele sadece '%' karakterinin crontab girişlerinde NEWLINE veya STDIN belirtmek için kullanılan özel bir karakter olması .

Bu datekomutun biçimlendirme girişiyle çakışıyor . Aşağıdakileri içeren bir komut date +%Y-%m-%dolarak:

date Y- m- d


4

Ayrıca backtick'lerle ilgili birçok problemim vardı. Bazen birden fazla tırnak ve geri tepme oluşumu gerekebilir. Sadece onları $ () ile değiştirin.

Örnek:

export NOW=`date`
by
export NOW=$(date)

-Gilson Soares


1
+1 Bu, bugünlerde tercih edilen sözdizimidir.
Dan Carley

4
ancak kullanıcının sorusuyla hiçbir ilgisi yok.
Aaron Brown

1
Tabii ki, geri tepme hakkında, soruyu tekrar okudum.
Sergio Abreu


-2

Geri tepmeler ile ilgisi yok. Korkunç bir şey şu ki, cron PATH'i göremiyor, cron'a “PATH nedir?” Demelisiniz. cron komut dosyalarında tekrar tekrar.

PATH=/bin:/usr/bin:/usr/sbin
* * * * * /your/script/here

Ve emri tam anlamıyla cron satırında geçirmek yerine emri bir dosyaya yazmaktan yanayım. Sahip olmak çok daha şık

* * * * * /your/script/here

göre

* * * * * perl -e '$@#$@$%%@' | grep -e '@#$@$#$@' | sed s/asfdf/asdfa/

bu satır bir dosya içine girebilir, chmod + x dosyası ve bu dosya çağrılabilir.

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.