2011-08-27 9 views
6

tôi có thể sử dụng lệnh nàysao lưu sử dụng cơ sở dữ liệu crontab với chức năng ngày

mysqldump -u"root" myDB| gzip > mydb_`date +%d-%m-%Y`.sql.gz 

nhưng khi chạy trong crontab

* * * * * mysqldump -u"root" myDB| gzip > mydb_`date +%d-%m-%Y`.sql.gz 

(lỗi này nguyên nhân theo ngày chức năng, khi tôi gỡ bỏ nó, Crontab chạy tốt)

trên ubuntu, xảy ra lỗi này trong tệp nhật ký.

ubuntu CRON[xxxx] (user) CMD(mysqldump -u"root" myDB| gzip > mydb_`date+) 
ubuntu CRON[xxxx] (CRON) error (grandchild #5353 failed with exit status 2) 
ubuntu CRON[xxxx] (CRON) info (no MTA installed, discarding output) 
+1

Crontab của bạn không giống với lệnh bạn đang chạy từ dòng lệnh. Bạn đã bỏ qua 'date +% d-% m-% Y' (lưu ý là thiếu backtics), cái mà làm cho nó thực sự hoạt động, vì backtics thực thi và trả về kết quả của hàm date ..... – gview

+0

nó là như nhau nhưng tôi không thể viết ra với stackoverflow. – meotimdihia

+0

Có, bạn có thể. Sử dụng backticks để định dạng một phần của một dòng như mã; thụt lề bằng 4 hoặc nhiều khoảng trống để định dạng một hoặc nhiều dòng dưới dạng mã. Chọn phạm vi văn bản và nhấp vào biểu tượng '{}' để thực hiện điều này tự động. Hoặc bạn có thể thoát khỏi một backtick với một dấu gạch chéo ngược: '\' '. –

Trả lời

13

% dấu hiệu trong một lệnh crontab được chuyển đổi sang dòng mới, và tất cả các dữ liệu sau khi % đầu tiên được gửi đến thiết bị nhập chuẩn của lệnh. Thay thế mỗi % bằng \%.

(Và bạn chỉ có 4 lĩnh vực thời gian: * * * *, bạn cần 5 (sau này bạn cố định các câu hỏi).)

+0

i câu hỏi cố định là * * * * * – meotimdihia

+0

nó hoạt động ngay bây giờ, cảm ơn – meotimdihia

0

Từ man 5 crontab:

Lệnh ` 'thứ sáu '' lĩnh vực (các phần còn lại của dòng) chỉ định lệnh là chạy.

Toàn bộ phần lệnh của dòng, lên đến dòng mới hoặc% ký tự, sẽ được thực thi bởi/bin/sh hoặc theo vỏ được chỉ định trong biến SHELL của tệp crontab.

Percent-dấu hiệu (%) trong lệnh , trừ khi trốn thoát với dấu chéo ngược(), sẽ được thay đổi vào ký tự xuống dòng, và tất cả các dữ liệu sau khi% đầu tiên sẽ được gửi đến các lệnh như đầu vào tiêu chuẩn. Không có cách nào để tách một dòng lệnh thành nhiều dòng, giống như dấu "\".