Saya memiliki tugas cron berikut yang ditentukan.
55 8 * * 3 /usr/bin/php /home/mark/dev/processes/customClient/events.php > /home/mark/dev/processes/customClient/events-`date +%Y-%m-%d --date='last Wednesday'`-`date +%Y-%m-%d`.csv
0 9 * * 3 /usr/bin/echo 'The csv for last week, trying my hand at automatiging this' | /usr/bin/mutt <emailaddress> -s 'Events from `date +%Y-%m-%d --date='last Wednesday'`-`date +%Y-%m-%d`' -a '/home/mark/dev/processes/customClient/events-`date +%Y-%m-%d --date='last Wednesday'`-`date +%Y-%m-%d`.csv'
Tampaknya berfungsi dengan baik jika saya menjalankannya perintah di atas langsung dari baris perintah. Tetapi ketika saya memeriksa jalannya script pagi ini saya mendapat e-mail yang menyatakan (saya parafrase karena saya tidak sengaja menghapusnya) bahwa kutu belakang tidak ditutup dengan benar.
command-line
cron
Markus D
sumber
sumber
/bin/sh: 1: Syntax error: EOF in backquote substitution
Untuk pekerjaan cron pertama./bin/sh: 1: Syntax error: Unterminated quoted string
Untuk pekerjaan cron kedua.$(...)
akan membantu Anda menangani masalah mengutip ...Jawaban:
Saya sangat menyarankan menempatkan pekerjaan cron non-sepele ke file skrip shell mereka sendiri, karena berbagai alasan:
sumber
%
karakter yang merepotkan dalam skrip akan mencegahcron
dari mengubahnya menjadi baris baru, yang merupakan masalah Anda yang sebenarnya.Ada tiga penyebab umum untuk perintah pekerjaan cron untuk berperilaku berbeda dibandingkan dengan perintah yang diketik langsung ke shell interaktif, dalam urutan umum kesamaan:
$PATH
, dan variabel-variabel lain yang diharapkan hilang./bin/sh
secara default, sedangkan Anda mungkin menggunakan beberapa shell lain secara interaktif.%
karakter secara khusus (itu diubah menjadi baris baru dalam perintah).Anda harus mendahului semua
%
karakter dengan\
file crontab, yang memberitahu cron untuk hanya menempatkan persen dalam perintah. Ingatlah bahwa ketika Anda menggunakandate
perintah dalam pekerjaan cron.Saya juga memperbaiki beberapa masalah penawaran:
$(…)
sebaliknya: aturan parsingnya lebih sederhana."$somevariable"
,"$(somecommand)"
. Di sini, kurangnya tanda kutip tidak berbahaya karenadate
perintah tidak pernah mengembalikan karakter khusus untuk format yang Anda gunakan, tetapi Anda harus hati-hati mengingat karakter mana yang spesial dan periksa ini setiap kali Anda meninggalkan subtitusi yang tidak dikutip. Tetap sederhana, selalu gunakan tanda kutip ganda kecuali jika Anda ingin pemisahan bidang dan pembuatan nama file terjadi pada hasilnya.sumber
Anda tampaknya telah bersarang
'
dalammutt
perintah:Coba gunakan
"
bukan bagian dalam'
sehingga pernyataan itu dibacasumber