2011-08-27 29 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 "\".

Các vấn đề liên quan