Shell script không chạy với cronjob


0

Tôi đang sử dụng PUTTY để tiếp cận máy chủ. Tôi có thể kết xuất cơ sở dữ liệu bằng lệnh sau:

/usr/bin/mysqldump --all-databases | /bin/gzip > Backup_DB/alldatabases_test.sql.gz

Khi tôi đang chạy tập lệnh từ root, tập tin sẽ bị hủy trong thư mục được chỉ định:

root@server1 [~]# sh mybackup.sh
root@server1 [~/Backup_DB]# ls -a
./  ../  alldatabases_test.sql.gz

Tuy nhiên, khi tôi thiết lập nó như một cronjob, nó sẽ không bỏ đi bất cứ thứ gì:

*/2 *   *   *   *   sh mybackup.sh

Các cronjobs khác đang hoạt động tốt.

BIÊN TẬP

Vì vậy, chạy tập lệnh không hoạt động, nhưng tôi đánh giá cao sự giúp đỡ của bạn. Mục tiêu cuối cùng của tôi là chạy tập lệnh từ một nơi có tất cả các cronjob khác của tôi và tạo bản sao lưu trong một thư mục mà tôi có quyền truy cập ftp. Đó là lý do tại sao tôi thêm một cronjob:

*/2 *   *   *   *   sh /home/mysite/www/cronjobs/mybackup.sh

với nội dung:

/usr/bin/mysqldump --all-databases | /bin/gzip > /home/mysite/www/cronjobs/alldatabases.sql.gz

Điều này cũng không hoạt động. Tôi không thể tìm thấy alldatabase.sql.gz trong thư mục / cronjobs. Là các đường dẫn được đặt sai?


Của bạn là ở đâu mybackup.sh? Bạn có thể thử thay đổi cronjob của bạn thành sh /path/to/mybackup.sh?
attomos

Tôi không phải là một người linux, nhưng khi tôi đăng nhập vào PUTTY và liệt kê các thư mục tôi thấy các thư mục như Desktop, Documents, Tải xuống, Pictures, public_html, v.v ... Đây là nơi mybackup.sh.
erdomester

Ok, khi bạn nhìn thấy mybackup.sh. Bạn có thể gõ pwdđể có được thư mục làm việc hiện tại. Hãy nói nó /home/username, nối nó với mybackup.sh. Vì vậy, trong cron của bạn, bạn có thể sử dụng một cái gì đó như sh /home/username/mybackup.sh. Hy vọng sự giúp đỡ này :)
attomos

Nó là / root. Tôi có nên thêm tập tin vào đó không?
erdomester

Vâng, bạn có thể thử nó. sh /root/mybackup.sh
attomos

Câu trả lời:


1

Đầu tiên, bạn cần đường dẫn đầy đủ đến tập lệnh như @attomos đã nói . Cách dễ nhất để có được điều này là chạy cd relative/path/to/script/directoryvà sau đó pwdhoặc echo "$PWD"để có được thư mục hiện tại.

Thứ hai, Backup_DB/alldatabases_test.sql.gzđường dẫn bên trong tập lệnh bây giờ có liên quan đến gốc hệ thống , vì vậy tập lệnh cố lưu nó vào /Backup_DB/alldatabases_test.sql.gz, có lẽ không có ý định. Bạn cần phải làm cho con đường mà tuyệt đối cũng : /root/Backup_DB/alldatabases_test.sql.gz.

Bạn sẽ thấy một số lỗi đầu ra từ này trong /var/log/cron.


Điều đó đã không giúp đỡ. Không có gì trong nhật ký về kịch bản đó.
erdomester

Dòng thực tế trong crontab của bạn ngay bây giờ là gì?
l0b0

Tôi đã chỉnh sửa câu hỏi của tôi. Tôi hy vọng điều này xây dựng nó.
erdomester

Bạn cần sử dụng một đường dẫn tuyệt đối cho tệp đầu ra, như tôi vừa nói. Với công việc định kỳ mới nhất của bạn alldatabases.sql.gzsẽ được lưu trên thư mục gốc của hệ thống. Toán tử chuyển hướng shell hoạt động trên thư mục hiện tại , mà ít nhất là cho một công việc cron gốc sẽ là thư mục gốc.
l0b0

Tôi đã thêm đường dẫn. Xin vui lòng xem bài chỉnh sửa của tôi một lần nữa. Vẫn không có tệp nào được tạo trong thư mục / cronjobs.
erdomester
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.