Apakah mungkin menggunakan variabel di crontab -e?

13

Apa bisa saya katakan:

MYPATH=/root/scripts  
MYSCRIPT=doit.sh

0 1 * * * $MYPATH/$MYSCRIPT

di crontab -e?

Apakah mungkin menggunakan variabel dalam crontab -e?

pengguna19496
sumber

Jawaban:

15

Ya, Anda bisa mendefinisikan dan menggunakan variabel dengan cara ini. Ada batasan (yang belum Anda tekan dalam contoh Anda): string di sebelah kanan =tanda diartikan secara harfiah, dengan spasi terdepan dihapus, jadi Anda tidak dapat menggunakan konstruksi seperti FOO=$BAR/qux(misalnya PATH=$HOME/bin:$PATHtidak akan melakukan apa pun yang berguna).

Ini dinyatakan dalam dokumentasi, yang dapat Anda lihat dengan menjalankan

man 5 crontab

(Catatan yang man crontabmenunjukkan dokumentasi crontab perintah , di bagian 1 manual; Anda ingin dokumentasi crontab format file , di bagian 5.)

Gilles 'SANGAT berhenti menjadi jahat'
sumber
7

Coba saja, ya itu mungkin. Anda dapat mengetahuinya dengan contoh sederhana ini, letakkan ini di crontab:

FOO = qwerty
* * * * * echo $ FOO> ~ / out

Dan periksa file ~/out(diperbarui setiap menit), itu harus berisi "qwerty".

cYrus
sumber
2
+1 untuk menunjukkan bagaimana OP dapat mengetahui hal serupa sendiri.
Arthaey
Contoh yang lebih baik akan menggunakan $ FOO di dalam skrip target.
Acumenus
4

Sementara crontab Linux mendukung mendefinisikan beberapa variabel yang memiliki nilai literal, itu tidak banyak digunakan selain mengkondensasi teks panjang ke representasi yang lebih pendek atau mengendalikan beberapa hal tentang cron itu sendiri, seperti tempat untuk mengirim output email.

Fleksibilitasnya adalah memahami bahwa bagian perintah dari entri cron akan diteruskan /bin/sh -catau shell didefinisikan dengan SHELLpada sistem yang menggunakan Vixie cron (yang biasanya dipasang pada sistem Linux). Apa artinya ini adalah sisa dari baris perintah adalah skrip shell sederhana. CATATAN: menyadari apa shell yang digunakan. Di Linux /bin/shbiasanya /bin/bashjadi $( ... )perintah yang disematkan bekerja, tetapi tidak pada sistem yang lebih tua di mana /bin/shhanya mengerti `saja.

Sebagai contoh, saya memiliki garis crontab sederhana yang mengarsipkan file MBX dari pesan yang disimpan setiap bulan dan mengompresnya. Ini terlihat seperti ini:

15 0 1 * *  nf=MailFeed-$( date +\%Y\%m ).mbx && cd Logs && mv MailFeed.mbx $nf && bzip2 -9 $nf

Ini akan menjalankan yang pertama setiap bulan pada pukul 12:15 pagi, menetapkan nama file baru dengan CCYYMM di dalamnya, memindahkan file saat ini ke nama baru dan mengompresnya. Yang perlu diingat adalah unescaped %(tanda persen) akan diperlakukan sebagai baris baru dan data yang mengikutinya akan dikirim sebagai stdin untuk perintah sebelum tanda persen. Itu sebabnya yang normal date +Y+mditulis seperti di date +\%Y\%matas.

D Prancis
sumber
-2

Tidak, Anda tidak dapat melakukan cronjob hanya dapat berisi item cron. Apakah ini bukan opsi untuk membuat skrip bash dan menjalankan skrip bash melalui cronjob?

Maran
sumber
1
Benar pada beberapa unix lain, tetapi cron Linux mendukung penugasan variabel lingkungan.
Gilles 'SANGAT berhenti menjadi jahat'