it-swarm-id.com

Menggunakan tanggal / waktu sistem dalam Cron Script

Saya menyiapkan Cronjob yang akan mencadangkan basis data MySQL yang saya miliki di server saya, tetapi saya tidak ingin terus menimpa file yang sama berulang kali. Sebagai gantinya, saya ingin memiliki serangkaian cadangan untuk dipilih, dilakukan secara otomatis. Sebagai contoh:

## Cronjob, run May 21st, 2011:
mysqldump -u username -ppasword database > /path/to/file/21-03-2011.sql

## SAME Conjob, run May 28th, 2011:
mysqldump -u username -ppasword database > /path/to/file/28-03-2011.sql

Dan seterusnya.

Apakah ada cara saya dapat menggunakan tanggal dan/atau waktu sistem sebagai semacam variabel dalam Cronjob saya? Jika tidak, apa saran Anda untuk mencapai hal yang sama?

38
AeroCross

Anda dapat mencoba sesuatu seperti ini (seperti catatan glenn jackmann di bawah ini, Anda harus melarikan diri semua % karakter):

15 11 * * * touch "/tmp/$(date +\%d-\%m-\%Y).sql"

Untuk melihat apakah cron khusus Anda akan menjalankan perintah dari crontab sebagai skrip sendiri, atau jika Anda perlu menulis skrip yang menghitung tanggal sebagai string, dan kemudian jalankan perintah mysqldump Anda.

Tanpa melarikan diri %, "cron" di Redhat Enterprise Linux 5.0 (saya pikir) terus memberi saya kesalahan karena tidak menemukan yang cocok ). Ini karena semuanya setelah _ unescaped % dikirim ke input standar dari perintah.

Saya juga akan merekomendasikan untuk menggunakan format tanggal ISO8601 (yyyy-mm-dd, yaitu %F) untuk membuat nama file dipesan berdasarkan tanggal ketika diurutkan secara leksikal.

46
Bruce Ediger

Anda harus dapat menggunakan date.
Tipe info date atau man date untuk detail.

Sesuatu seperti yang berikut ini mungkin cocok untuk Anda (ubah format tanggal sesuai kebutuhan Anda)

yourcommand > filepathandnameprefix$(date +"\%d-\%m-\%Y").extension
7
asoundmove

Untuk menjalankan perintah seperti itu, kita harus melarikan diri% dan kemudian menjalankannya seperti yang diharapkan.

Lihat: http://www.ducea.com/2008/11/12/using-the-character-in-crontab-entries/

4
Édouard Lopez

Inilah skrip bash yang saya gunakan:

#!/bin/bash
mysqldump -u user1 -p DatabaseName | gzip > BackupFolder/backup`date +%F_%T`.sql.gz

File terlihat seperti:

backup2011-03-02_15:16:46.sql.gz

Arahkan tugas cron untuk menjalankannya setiap malam atau apa pun yang Anda inginkan.

1
user5319

Tulis skrip pembungkus kecil yang menggunakan perintah date dan memanggil perintah cadangan Anda.

#!/bin/bash
NOW=`/bin/date +"%m%d%Y-%H%M%S"`
if [[ "$?" != "0" ]]; then
 NOW="UNKNOWN_DATE"
 fi
mysqldump -u username -ppassword database > /path/to/file/$NOW.sql
if [[ "$?" != "0" ]]; then
 echo "$0: backup failed with error code $?"
 fi
0
LawrenceC