it-swarm-vi.com

Sử dụng ngày / giờ hệ thống trong Tập lệnh Cron

Tôi đang thiết lập một Cronjob sẽ sao lưu cơ sở dữ liệu MySQL mà tôi có trong máy chủ của mình, nhưng tôi không muốn nó tiếp tục ghi đè lên cùng một tệp nhiều lần. Thay vào đó, tôi muốn có một loạt các bản sao lưu để lựa chọn, được thực hiện tự động. Ví dụ:

## 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

Và như thế.

Có cách nào để tôi có thể sử dụng ngày và/hoặc thời gian của hệ thống như một loại biến trong Cronjob của mình không? Nếu không, đề xuất của bạn để thực hiện cùng là gì?

38
AeroCross

Bạn có thể thử một cái gì đó như thế này (như glenn jackmann ghi chú bên dưới, bạn phải thoát tất cả % nhân vật):

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

Để xem liệu cron cụ thể của bạn sẽ chạy lệnh ra khỏi crontab dưới dạng tập lệnh trong chính nó hay nếu bạn cần viết một tập lệnh xác định ngày tháng dưới dạng chuỗi, sau đó chạy lệnh mysqldump của bạn.

Không thoát khỏi %, "cron" trên Redhat Enterprise Linux 5.0 (tôi nghĩ) tiếp tục gây ra lỗi cho tôi về việc không tìm thấy kết quả trùng khớp ). Điều này là do mọi thứ sau khi không được giải thoát % được gửi đến đầu vào tiêu chuẩn của lệnh.

Tôi cũng sẽ đưa ra khuyến nghị sử dụng định dạng ngày ISO8601 (yyyy-mm-dd, đó là %F) để đặt tên tệp theo ngày khi được sắp xếp theo từ vựng.

46
Bruce Ediger

Bạn sẽ có thể sử dụng date.
Kiểu info date hoặc là man date để biết chi tiết.

Một cái gì đó như sau có thể phù hợp với bạn (thay đổi định dạng ngày theo nhu cầu của bạn)

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

Để có một lệnh như vậy chạy phù hợp, chúng ta sẽ phải thoát% và sau đó nó sẽ chạy như mong đợi.

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

4
Édouard Lopez

Đây là tập lệnh bash tôi đã sử dụng:

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

Các tập tin trông như:

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

Chỉ công việc cron vào lúc này để chạy hàng đêm hoặc bất cứ điều gì bạn thích.

1
user5319

Viết một tập lệnh bao bọc nhỏ sử dụng lệnh date và gọi lệnh sao lưu của bạn.

#!/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