Công việc định kỳ hàng ngày không chạy


10

Tổng quan nhanh: Tôi có một tập lệnh sẽ sao lưu hàng ngày kho lưu trữ mã nguồn của tôi từ SVN thành một tarball cho ngày hôm đó. Tôi đã thử nghiệm tập lệnh và nó hoạt động rất tốt miễn là tôi chạy nó dưới dạng sudo, vì quyền sở hữu của thư mục đầu ra.

Vì vậy, vấn đề là tôi muốn chạy nó hàng ngày, vì vậy tôi đặt một liên kết đến nó trong thư mục /etc/cron.daily. Dưới đây là nội dung của thư mục.

thom@spenser:/etc/cron.daily$ ls -l
total 60
-rwxr-xr-x 1 root root   189 2011-09-14 02:21 apport
-rwxr-xr-x 1 root root 15535 2011-10-06 11:30 apt
-rwxr-xr-x 1 root root   314 2011-08-08 16:57 aptitude
lrwxrwxrwx 1 root root    24 2012-02-28 11:05 backup -> /usr/local/bin/backup.sh
-rwxr-xr-x 1 root root   502 2011-06-08 11:48 bsdmainutils
-rwxr-xr-x 1 root root   256 2011-10-06 04:04 dpkg
-rwxr-xr-x 1 root root   372 2011-10-04 16:50 logrotate
-rwxr-xr-x 1 root root  1353 2011-07-27 07:17 man-db
-rwxr-xr-x 1 root root   606 2011-08-17 09:16 mlocate
-rwxr-xr-x 1 root root   249 2011-06-24 05:36 passwd
-rwxr-xr-x 1 root root  2417 2011-07-01 17:25 popularity-contest
-rwxr-xr-x 1 root root   383 2011-09-30 15:09 samba
-rwxr-xr-x 1 root root  3594 2011-09-19 20:07 standard
thom@spenser:/etc/cron.daily$ 

Vấn đề là nó đơn giản không bao giờ chạy. Đây là quyền cho tập lệnh đó:

thom@spenser:/etc/cron.daily$ ls -l /usr/local/bin/backup.sh 
-rwxr-xr-x 1 root root 260 2012-02-28 11:03 /usr/local/bin/backup.sh

Ý tưởng?


2
Nếu có thể, vui lòng xem xét việc đóng một số câu hỏi mở khác của bạn bằng cách chọn câu trả lời tốt nhất (nếu chúng có câu hỏi). Chúng tôi cần người dùng duy trì câu hỏi của họ để trang web có thể là một công cụ hiệu quả cho người tiếp theo gặp vấn đề của bạn. Để biết thêm chi tiết về thực tiễn tốt nhất, hãy xem xét việc đọc Câu hỏi thường gặp khi đặt câu hỏi .
Bruno Pereira

Câu trả lời:


37

Đã thử cái này

run-parts --test /etc/cron.daily

Tìm thấy rằng tập tin của tôi update.ubfox không xuất hiện. Cũng nhận thấy rằng tập tin của tôi có một phần mở rộng (có dấu chấm trong đó).

Các bước để khắc phục điều này.

  1. Đổi tên update.ubfox của tôi thành update- ubfox
  2. Bây giờ một lần nữa run-parts --test /etc/cron.daily, lần này tập tin của tôi xuất hiện!

1
Vâng, điều này đã sửa nó cho tôi. Nó không giống như dấu chấm trong tên tệp, đổi tên tệp của tôi từ myscript.sh thành myscript làm việc cho tôi.
Matt Parkins

3
Điều này cần phải cao hơn. Tôi đã lưu tập lệnh của mình dưới dạng "backup.sh" truyền thống. Loại bỏ phần ".sh" đã giải quyết nó. Cảm ơn rất nhiều!
David

Cảm ơn! Anh chàng / gal đã quyết định loại bỏ các tập tin .sh khỏi cron hàng ngày nên bị xấu hổ!
Sylvain

Nên công khai nổi! ;-) Tôi tự hỏi mọi người mất bao nhiêu thời gian vì quyết định này ... Tôi cũng tự hỏi liệu có lý do chính đáng cho nó không?
xastor

3

Có thể là một trong nhiều điều:

Đường dẫn rễ:

Tùy thuộc vào các lệnh đang được chạy, bạn có thể cần mở rộng biến PATH của người dùng gốc bằng cách đặt dòng sau ở đầu tệp crontab của họ:

PATH = / usr / sbin: / usr / bin: / sbin: / bin

src: https://help.ubfox.com/community/CronHowto

Hoặc chỉ sử dụng đường dẫn đầy đủ đến từng lệnh trong tập lệnh của bạn: /bin/lsthay vì lsví dụ. ( which lstại dòng lệnh cho đường dẫn).

Có một lỗi lạ về dấu chấm trong tên tệp được báo cáo ở đây . Có thể mở rộng đến tệp bạn đang liên kết đến, mặc dù điều này dường như không thể.

Bạn đang lưu đầu ra từ tập tin sao lưu? Đặt một cái gì đó như thế này trên dòng đầu tiên, để giúp xác định xem nó hoàn toàn không chạy hoặc đang chạy nhưng không thành công tại một số điểm.

/bin/echo "Attempting to run backup" >> /path-to-home/backup.log

Hoặc thử thêm tập lệnh vào tệp crontab trực tiếp:

sudo -i
crontab -e
[add the next line to the file, then save and exit]
33 15 * * * /usr/local/bin/backup.sh

sẽ chạy vào lúc 15:30 mỗi ngày nếu máy bật. sử dụng * * * * * trong khi thử nghiệm để chạy một lần một phút cho đến khi bạn làm cho nó hoạt động.


1
Sử dụng đường dẫn tuyệt đối trong các kịch bản là không khuyến khích. Nếu bạn không biết PATH là gì, hãy tự đặt nó vào tập lệnh. Xem lý do tại sao crontab không hoạt động
geirha

Liên kết hữu ích, cảm ơn. Lý do nhất định không sử dụng đường dẫn đầy đủ là tính di động. Đủ công bằng. Một giải pháp hợp lý khác là xác định các lệnh bạn đang sử dụng khi bắt đầu tập lệnh, cùng với các cấu hình khác: LS = / bin / ls; SRC_DIR = / nhà / joe / src. Sau đó sử dụng $ LS $ SRC_DIR. Giữ mọi thứ được xác định ở trên cùng và ở một nơi.
Sean

Tôi thấy rằng để giảm khả năng đọc, và bạn phải vượt qua mọi lệnh = = path / to / cho mọi hệ thống mới mà nó nên chạy. Trên một hệ thống, tất cả các lệnh bạn cần có thể nằm trong / usr / bin, trên một số khác là trong / bin, các lệnh khác trong / usr / bin. Chỉ cần có cả / usr / bin và / bin trong PATH sẽ không thành vấn đề. Mặt khác, tên biến phải là chữ thường, nếu không, bạn có nguy cơ ghi đè các biến shell đặc biệt hoặc biến môi trường.
geirha

re: tên biến chữ hoa Tôi đã luôn luôn làm điều đó mà không cần suy nghĩ nhiều, do các kịch bản đầu tiên tôi thấy làm nó. Nhưng bạn đã đúng, không có nhược điểm và cơ hội nhược điểm. Cảm ơn đã chỉ ra điều này, phá vỡ thói quen này ngay bây giờ.
Sean

1

Grep syslog của bạn cho các tin nhắn như;

crond: (*system*) BAD FILE MODE

các tệp cần được giới hạn ở (là đủ) tại 644):

chmod 0644 /etc/cron.d/my_crontab
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.