Làm cách nào tôi có thể ngăn các tác vụ cron bị kích hoạt bởi khách truy cập trang web?


12

Nhật ký trang web của tôi cho thấy cron được kích hoạt nếu có ai đó truy cập trang web. Điều này đang làm chậm thời gian tải cho lần truy cập đầu tiên.

Cron được cấu hình để chạy mỗi 3 giờ tại đây: Quản trị »Cấu hình» Hệ thống »Cron .

Làm cách nào tôi có thể chạy cron theo lịch trình và không được kích hoạt bởi khách truy cập?

Câu trả lời:


9

Bạn nên bắt đầu bằng cách đọc các trang cẩm nang Drupal về cron để lấy nền và các lệnh để chạy.

  • Nếu bạn có quyền truy cập shell / SSH vào máy chủ (Linux), bạn có thể chạy run crontab -u www-data -eđể chỉnh sửa bảng cron cho người dùng web. Bạn sẽ có thể sử dụng các chi tiết trong liên kết ở trên để thiết lập cron chạy phù hợp thường xuyên như bạn muốn.
  • Nếu bạn đang sử dụng lưu trữ được chia sẻ mà không có quyền truy cập shell, bạn sẽ cần sử dụng bảng điều khiển của máy chủ web (CPanel, Plesk, v.v.) để đăng nhập và thêm 'Tác vụ theo lịch trình'. Điều này cung cấp dưới dạng giao diện web cho các tab cron, do đó sẽ cần các cài đặt tương tự.
  • Nếu những thứ này không có sẵn, bạn sẽ cần yêu cầu công ty lưu trữ của mình giúp đỡ, nhưng cũng có những dịch vụ miễn phí và trả phí mà bạn có thể sử dụng hãy gọi cron.phptrang từ xa cho bạn. Xem Đặt công việc định kỳ chẳng hạn.

Hãy xem giống như mô-đun Elysia Cron nếu bạn muốn biết thêm về cron nói chung - nó có tài liệu tốt và cho phép bạn kiểm soát tốt những nhiệm vụ chạy khi nào.

Cuối cùng, hãy nhớ tắt trang web đang chạy khi khách truy cập đến Quản trị »Cấu hình» Hệ thống »Cron khi bạn quản lý để thiết lập trang này.


Tôi có quyền truy cập shell. Tôi biết làm thế nào để thiết lập công việc định kỳ. Vì vậy, tôi sẽ tìm ra nó. Nhưng cảm ơn vì đã tóm tắt tất cả các thông tin.
cateye

Nhưng điều tôi không hiểu là tại sao Drupal lại hành xử như bây giờ. Nếu cấu hình cơ bản được lên lịch để chạy cron mỗi 3 giờ, tại sao nó lại chờ khách truy cập?
cateye

1
Nghĩ về nó. Tất nhiên, Drupal không có cách nào để chạy một công việc định kỳ mà không cần bootstrapping. Và bootstrapping xảy ra khi một khách truy cập vào trang web. Vì vậy, tóm tắt là: Nếu bạn muốn các công việc định kỳ thực sự được lên lịch, bạn phải thiết lập nó ở phía máy chủ.
cateye

2
Chính xác. Không có gì xảy ra trên một máy chủ mà không có ai đó hoặc một cái gì đó chạy nó. Mặc định Drupal 7 là chạy cron khi người dùng thỉnh thoảng đến để đảm bảo các tác vụ chính được chạy. Drupal 6 đã dựa vào mô-đun Cron của Poor Man để thực hiện việc này trong trường hợp không có công việc định kỳ phù hợp ... và hầu hết mọi thứ trong Drupal đều cần bootstrap để xảy ra trước tiên. Một công việc định kỳ thích hợp trên máy chủ chắc chắn là lựa chọn tốt nhất.
Jim Kirkpatrick

1
Các trả lời dưới đây mô tả làm thế nào để sửa chữa nó. Không phải cái này :(
Tomáš Fejfar 17/12/14

13

Drupal 7 được tích hợp trong các mô-đun mã của nó trong Poormanscron , với mục đích chính xác là chạy các tác vụ cron Drupal trên một trang web nơi không thể đặt các tác vụ cron, khi người dùng truy cập trang web của bạn và cứ sau X giờ (như được đặt trong trang bạn đã thấy).

Nếu bạn muốn tránh hành vi đó, bạn chỉ cần đặt "Chạy cron every" thành "Không bao giờ"; trái với những gì có vẻ như, điều đó chỉ ảnh hưởng đến những gì xảy ra khi người dùng truy cập trang web của bạn. [1] Bạn vẫn có thể chạy các tác vụ cron Drupal từ bên ngoài Drupal, hãy nhớ rằng trong Drupal 7 cron.php cần phải được gọi, từ bên ngoài Drupal, chuyển giá trị được hiển thị trong "Quản trị> Báo cáo> Báo cáo trạng thái."

 

ảnh chụp màn hình

 

 

 

 

 

[1]: Trên thực tế, cả cron.php , hay drupal_cron_run () đều không kiểm tra biến Drupal được sử dụng trong trang cài đặt đó. Các biến Drupal duy nhất được sử dụng là:

  • "cron_key" có chứa khóa cron được sử dụng để tránh các tác vụ cron Drupal được chạy từ người dùng trái phép
  • "bảo trì_mode" được đặt thành TRUEkhi trang web ở chế độ bảo trì
  • "cron_last" có chứa dấu thời gian khi các tác vụ cron được chạy lần trước

Khó khăn duy nhất là khi công việc định kỳ hết thời gian mỗi khi bạn xem trang và thậm chí bạn không thể đăng nhập với tư cách quản trị viên để vô hiệu hóa nó! thở dài ... tôi sẽ hiểu ra nhưng thật tốt khi biết nó có thể bị vô hiệu hóa, một khi tôi thực sự vào đó

Vâng, tôi đã giải quyết vấn đề này một cách nhanh chóng bằng cách thiết lập màn hình thời gian hoạt động Montastic "kiểm tra" URL kích hoạt cron mỗi 6 giờ ...
Anders
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.