Apa bisa saya katakan:
MYPATH=/root/scripts
MYSCRIPT=doit.sh
0 1 * * * $MYPATH/$MYSCRIPT
di crontab -e
?
Apakah mungkin menggunakan variabel dalam crontab -e
?
Apa bisa saya katakan:
MYPATH=/root/scripts
MYSCRIPT=doit.sh
0 1 * * * $MYPATH/$MYSCRIPT
di crontab -e
?
Apakah mungkin menggunakan variabel dalam crontab -e
?
Jawaban:
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:$PATH
tidak akan melakukan apa pun yang berguna).
Ini dinyatakan dalam dokumentasi, yang dapat Anda lihat dengan menjalankan
man 5 crontab
(Catatan yang man crontab
menunjukkan dokumentasi crontab
perintah , di bagian 1 manual; Anda ingin dokumentasi crontab
format file , di bagian 5.)
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"
.
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 -c
atau shell didefinisikan dengan SHELL
pada 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/sh
biasanya /bin/bash
jadi $( ... )
perintah yang disematkan bekerja, tetapi tidak pada sistem yang lebih tua di mana /bin/sh
hanya 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+m
ditulis seperti di date +\%Y\%m
atas.
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?