Điểm:0

Không thể để crontab hoạt động như mong đợi

lá cờ id

Tôi muốn thực hiện sao lưu thư mục chính hàng ngày của mình bằng cách thực thi đoạn mã lệnh sau (tôi có thể ghi vào/home):

   #!/bin/sh -e
   cd / nhà
   ls -l 
   rm -f silbar.tar.gz
   tiếng vang "bắt đầu tar"
   tar -czf silbar.tar.gz silbar
   cd ./silbar
   tiếng vang "xong với tar"
   tiếng kêu bíp

Để làm như vậy, tôi đã tạo tệp crontab cá nhân của mình bằng cách nhập ~$ crontab -e và thêm dòng sau (và dòng duy nhất không phải là nhận xét)

30 6 * * * mybackup.script 

giả sử rằng crontab của tôi sẽ chạy trong thư mục chính của tôi.

Nhưng không có gì xảy ra. Làm ~$ grep CRON /var/log/syslog hiển thị, ngoài những thứ gốc, lỗi sau:

Ngày 30 tháng 8 06:30:01 Puma CRON[100126]: (silbar) CMD (mybackup.script )

Ngày 30 tháng 8 06:30:01 Puma CRON[100125]: (CRON) thông tin (Chưa cài đặt MTA, loại bỏ đầu ra)

Vì vậy, tôi đang làm gì sai? MTA là gì?

user535733 avatar
lá cờ cn
Tập lệnh của bạn có lỗi. Chúng tôi không biết lỗi là gì. Cron đang cố gửi email thông báo lỗi cho bạn, nhưng hệ thống của bạn không được thiết lập cho việc đó. Thay vì loay hoay về việc thiết lập MTA cho cron, chỉ cần chuyển hướng đầu ra lỗi sang một tệp để bạn có thể đọc nó.
user535733 avatar
lá cờ cn
Ví dụ: `30 6 * * * /home/silbar/mybackup.script > /home/silbar/backup.log 2>&1`
lá cờ cn
vui lòng không sử dụng /home cho các tệp cá nhân. Điều duy nhất trong đó phải là thư mục người dùng. Đặt chúng ở nơi khác; cũng không bao giờ đặt nhiều hơn 1 nhà trong tệp tar; sử dụng 1 tệp cho mỗi /home/USER/ và đặt nó vào /home/USER (coi đó là "cách làm tốt hơn"). Đó là một vi phạm bảo mật nếu bạn không. Và luôn sử dụng đường dẫn tuyệt đối khi sử dụng cron. Đó là phương pháp an toàn nhất. "rm" là không cần thiết. "tar" theo mặc định sẽ ghi đè mà không cần hỏi.
Điểm:1
lá cờ cn

Bạn có thể cần nhập đường dẫn đầy đủ của tập lệnh trong cronjob của mình.

Cronjobs chạy với một môi trường gần như trống rỗng. Do đó, các tệp thực thi có thể không được tìm thấy. Điều tương tự cũng xảy ra với các lệnh trong tập lệnh: cung cấp đường dẫn đầy đủ tới các lệnh hoặc thiết lập biến PATH trong tập lệnh của bạn.

Điểm:0
lá cờ it

Bằng cách bắt đầu với #!/bin/sh -e, bạn làm cho tập lệnh của mình chạy với sh (đánh đậpIMHO tốt hơn), và -e thoát trên bất kỳ lỗi nào (người đàn ông đặt), vì vậy người ta không thể xử lý lỗi. Tập lệnh của bạn bị lỗi và cron đang cố gắng gửi nhật ký qua email cho bạn. cron không thể tìm thấy Tác nhân chuyển thư (MTA). Email chưa được định cấu hình trên hệ thống của bạn, ngay cả khi gửi đến địa phương.

Công việc chạy qua cron, hoặc hệ thống tập lệnh khởi động không chạy trong cùng một môi trường thời gian chạy mà bạn có trên máy tính để bàn của mình. hệ thống kịch bản khởi động được chạy như nguồn gốc. Không ai trong số bạn CON ĐƯỜNG thay đổi hoặc cài đặt biến môi trường khác từ ~/.bashrc được tự động lan truyền đến bạn cron Công việc. Ví dụ, không có $HIỂN THỊ, vì vậy các chương trình GUI cần được xử lý đặc biệt (đọc người đàn ông xhost).

Người ta có thể đặt các biến môi trường cho tất cả mọi người cron công việc trong crontab tập tin Đọc người đàn ông 5 crontab.

Nhìn vào kết quả của echo "=== id ==="; id;echo "=== set ==="; set; echo "=== env ==="; env | sort;echo "=== bí danh ==="; bí danh trong mỗi môi trường của bạn.

Kể từ khi chỉ huy một phần của crontab theo mặc định, dòng được giải thích bởi /bin/sh, có cú pháp đơn giản hơn /bin/bash, tôi khuyên bạn nên có chỉ huy là một cuộc gọi đến một đánh đập tập lệnh (có thể thực thi, được gắn kết, bắt đầu bằng #!/bin/bash) thiết lập môi trường, sau đó gọi chương trình mong muốn.

Điểm:0
lá cờ id

Ồ!, các câu trả lời rất hữu ích từ người dùng535733, Rinzwind, Vanadium và waltinator. Bây giờ tôi đã làm cho nó hoạt động như được đề xuất, sử dụng bash và đường dẫn đầy đủ. Bản sao lưu hiện được chuyển đến một ổ đĩa flash (dù sao thì đó cũng là nơi tôi muốn nó đến) thay vì vào/home.

Cảm ơn tất cả, Dick

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.