Crontab sao lưu theo lịch trình không chạy


0

Tôi cần phải có nén ZIP xảy ra trên một ổ đĩa khác với máy chủ do không gian hạn chế.

Đây là lệnh tôi sử dụng trong crontab:

00 1 * * * osmc cd /media/SAMSUNG/backups/work/daily && zip -r -FS  Workdaily$(date +%a) /media/Data/Work

Nó sẽ chạy hàng ngày lúc 1 giờ sáng, nhưng nó không có. Nó dường như bị bắt kịp trên cd /directory.

Nếu tôi chạy thủ công thì nó hoạt động tốt.


Tôi có cron chỉ cần chạy một cái gì đó như mybackup.sh và phá vỡ các lệnh của tôi trong tập lệnh đó.
Tyson

Câu trả lời:


1

Đây là lệnh crontab của bạn:

00 1 * * * osmc cd /media/SAMSUNG/backups/work/daily && zip -r -FS  Workdaily$(date +%a) /media/Data/Work

Bạn nói:

Nếu tôi chạy thủ công thì nó hoạt động tốt.

Vì vậy, tất cả điều này có nghĩa là lệnh hoạt động hoàn hảo khi bạn đăng nhập, nhưng không phải trong một crontab chính xác?

Vâng, nhìn vào lệnh của bạn. Cụ thể là zip. Khi bạn đăng nhập vào hệ thống của mình, hệ thống sẽ biết tìm kiếm các đường dẫn đã thiết lập của bạn. chỉ có nếu bạn đăng nhập vào Haiti cho zip nhị phân. Nhưng khi bạn đang chạy nó như là một crontab không có đường dẫn tìm kiếm nhị phân và như vậy; bạn cần phải rõ ràng đặt đường dẫn đến zip nhị phân.

Vì vậy, tôi khuyên bạn nên chạy which để xem nơi zip nhị phân thực sự nằm như thế này:

which zip

Giá trị được trả về phải là một cái gì đó như thế này; đây là nơi nó được cài đặt trên thiết lập Ubuntu 12.04 cục bộ của tôi:

/usr/bin/zip

Làm tương tự với date như vậy

which date

Và đầu ra được trả về phải là một cái gì đó như:

/bin/date

Bây giờ biết điều đó, điều chỉnh của bạn crontab mục để gọi một cách rõ ràng đường dẫn đầy đủ đến zip như thế này:

00 1 * * * osmc cd /media/SAMSUNG/backups/work/daily && /usr/bin/zip -r -FS  Workdaily$(/bin/date +%a) /media/Data/Work

Và tất cả nên hoạt động tốt.

Điều đó nói rằng, việc đặt các lệnh ghép như thế trong một crontab, đặc biệt là đối với một tập lệnh sao lưu, tập tin trở lại. Kịch bản có thể hoạt động, nhưng cuối cùng nó trở thành một thứ rườm rà và khó hiểu để duy trì.

Vì vậy, tôi khuyên bạn nên tạo một tập lệnh Bash đơn giản với các lệnh bên trong nó và sau đó chạy crontab trên kịch bản Bash đó. Nội dung của tập lệnh Bash đó có thể đơn giản như thế này:

#!/bin/bash
cd /media/SAMSUNG/backups/work/daily && /usr/bin/zip -r -FS  Workdaily$(/bin/date +%a) /media/Data/Work

Lưu ý tôi đã xóa osmc vì đó không phải là một mệnh lệnh; Tôi tin rằng nó là một tài liệu tham khảo cho người dùng của bạn? Vì vậy, hãy để nói rằng kịch bản Bash được đặt tên my_backup.sh và trong thư mục người dùng của bạn có tên /home/kris. Sau đó mới crontab mục sẽ là:

00 1 * * * /home/kris/my_backup.sh

Một thiết lập như thế dễ dàng hơn nhiều để duy trì trong quan điểm khiêm tốn của tôi. Và hãy chắc chắn rằng tập lệnh có thể được thực thi bằng cách chạy chmod trên đó như thế này:

chmod 744 /home/kris/my_backup.sh

Jake, tôi đã cố gắng tự khởi động crontab một phút trong tương lai để kiểm tra và nó vẫn không chạy. Đây là mục crontab của tôi để kiểm tra: 28 19 * * * osmc /home/osmc/workdailybkup.sh này đã chạy vào lúc 7:28 tối EST. Đây là kịch bản của tôi: #! / Bin / bash osmc cd / media / SAMSUNG / sao lưu / công việc / hàng ngày & amp; & amp; / usr / bin / zip -r -FS Workd Daily $ (ngày +% a) / media / Data / Work Mã zip nào ở vị trí bạn nói sẽ có và tập lệnh nằm ở đường dẫn đó.
Kris Sandberg

Xin lỗi, tôi cũng đã viết kịch bản theo hướng dẫn của bạn.
Kris Sandberg

Nếu tôi cố chạy tập lệnh theo cách thủ công, tôi sẽ gặp các lỗi này là "sh" và "bash": osmc@osmc2:/media/SAMSUNG/backups/work/daily$ sh /home/osmc/workdailybkup.sh : not foundworkdailybkup.sh: 2: /home/osmc/workdailybkup.sh: /home/osmc/workdailybkup.sh: 3: /home/osmc/workdailybkup.sh: osmc: not found osmc@osmc2:/media/SAMSUNG/backups/work/daily$ bash /home/osmc/workdailybkup.sh /home/osmc/workdailybkup.sh: line 2: $'\r': command not found /home/osmc/workdailybkup.sh: line 3: osmc: command not found
Kris Sandberg

@KrisSandberg Tôi đoán nó cần biết ở đâu osmc Là. Không quen thuộc với công cụ đó, nhưng tôi tin logic tương tự như zip áp dụng. Từ thiết bị đầu cuối chỉ cần chạy which osmc và sau đó sử dụng đường dẫn đầy đủ đó trong workdailybkup.sh kịch bản. Ngoài ra, để chạy tập lệnh don don preend sh hoặc là bash với nó Chỉ cần chạy nó là ./workdailybkup.sh.
JakeGould

1
tất cả mọi thứ đang làm việc cho đến nay. Tôi đã kiểm tra câu trả lời đầu tiên của bạn là chính xác. Tôi còn quá mới để upvote, xin lỗi. Những sai lầm tôi đã mắc phải sau câu trả lời ban đầu của bạn là để lại "osmc" trong bash chỉ là người dùng cho crontab và tạo tập lệnh bash trong notepad. Tập lệnh bash notepad trả về lỗi "r /" mà một tìm kiếm google nhanh đã bảo tôi tạo theo định dạng UNIX / Linux để sửa. Tôi đã sử dụng notepad ++ cá nhân. Cảm ơn một lần nữa vì sự giúp đỡ của bạn!
Kris Sandberg
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.