Đâ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