2009-08-12 32 views
5

Tôi đang sử dụng MYSQL làm cơ sở dữ liệu và PHP làm ngôn ngữ lập trình. Tôi muốn chạy một công việc cron sẽ chạy cho đến ngày hệ thống hiện tại khớp với cột "hạn chót (ngày)" trong bảng cơ sở dữ liệu của tôi được gọi là "DỰ ÁN". Một khi các ngày giống như một truy vấn cập nhật phải chạy mà sẽ thay đổi trạng thái (trường của bảng dự án) từ "mở" thành "đóng".cron job hoặc PHP scheduler

Tôi không thực sự chắc chắn nếu công việc cron là cách tốt nhất hoặc tôi có thể sử dụng gây nên hoặc có thể là cái gì khác. Ngoài ra tôi đang sử dụng Apache như máy chủ web của tôi và hệ điều hành của tôi là windows vista.

Ngoài ra đó là cách tốt nhất để làm điều đó? PHP scheduler hoặc cron jobs hoặc phương thức nào khác? ai có thể khai sáng cho tôi được không?

+1

Nguy hiểm tương tự như http://stackoverflow.com/questions/1263237/cronjob-trigger-which-can-update-the-database-everyday - Mặc dù khác biệt ở chỗ anh ấy hỏi liệu anh ấy có nên sử dụng tác vụ theo lịch hoặc Lập lịch nội bộ của cơ sở dữ liệu – gnarf

+0

Ngoài ra kaushik - phiên bản nào của máy chủ mysql bạn có? – gnarf

Trả lời

1

Tôi sẽ luôn tìm kiếm một công việc cron cho bất kỳ lịch trình nào liên quan.

Điểm thưởng lớn nhất là bạn có thể lặp lại thông tin và email được gửi qua email cho bạn.

Bạn sẽ tìm thấy một khi bạn bắt đầu sử dụng cronjobs, thật khó để dừng lại.

+0

nhưng nó được thực hiện trên một trang web? như các trang web thương mại làm điều đó với sự giúp đỡ của công việc cron? là cron công việc cách tốt nhất có quá? bởi vì chúng tôi có thể thay đổi máy chủ và có thể cần thiết lập máy chủ mỗi khi chúng tôi thay đổi máy chủ.? –

+1

Bạn sẽ cần thực hiện nó từ tài khoản shell trên chính máy chủ. Nếu bạn SSH vào máy chủ web, hãy xác định tệp php bạn muốn chạy, nhập crontab -e rồi thêm vào lệnh, tức là */5 * * * */usr/bin/php/home/youraccount/website/file.php Điều đó sẽ chạy sau mỗi năm phút. Tìm kiếm google cho crontab máy phát điện và họ sẽ giúp bạn tinh chỉnh timings và tạo ra các chuỗi lệnh cho bạn. Bạn sẽ cần phải lưu crontab khi chuyển giao giữa các host: crontab -l> myct.txt và trên máy chủ mới, tôi nghĩ đó là crontab

1

cron không tồn tại, mỗi lần, trong vista, nhưng những gì tồn tại là trình quản lý lịch biểu chuẩn mà bạn có thể chạy bằng dòng lệnh như "php -q -f myfile.php" sẽ thực thi tệp php tại thời điểm đã cho.

bạn cũng có thể sử dụng cổng của chương trình cron, có nhiều thứ ở đó.

nếu nó không quan trọng đối với lần thứ hai, bất kỳ ứng dụng lập lịch cửa sổ nào cũng sẽ làm, chỉ cần chắc chắn bạn có đường dẫn bin PHP trong biến PATH của bạn để đơn giản.

0

làm thế nào về PHPscheduler..R chúng không tốt hơn cronjobs? Tôi nghĩ rằng crons sẽ độc lập với ứng dụng do đó sẽ rất khó khăn nếu người ta phải thay đổi host..i không thực sự chắc chắn mặc dù .. Nó sẽ là tuyệt vời nếu bất cứ ai có thể bình luận về điều này !! Cảm ơn!

4

Tôi nghĩ rằng khái niệm của bạn cần thay đổi.

PHP không thể lên lịch công việc, cả MySQL cũng không thể. Kích hoạt trong MySQL thực hiện khi một truy vấn mysql xảy ra, không phải tại một thời điểm cụ thể. Không phải

Giới hạn này thường không phải là vấn đề trong phát triển web. Lý do là vì ứng dụng PHP của bạn nên kiểm soát tất cả các dữ liệu đi vào và ra. Thông thường, điều này có nghĩa là chỉ HTML hiển thị dữ liệu đó hoặc các định dạng khác cho người dùng hoặc các chương trình khác.

Trong trường hợp của bạn, bạn có thể nghĩ về nó theo cách này. Hạn chót là ngày được ấn định. Bạn có thể coi nó là dữ liệu và lưu nó vào cơ sở dữ liệu của bạn. Khi thời hạn xảy ra không quan trọng, đó là dữ liệu bạn đã gửi trong cơ sở dữ liệu của bạn được xem chính xác.

Khi yêu cầu được gửi đến ứng dụng của bạn, kiểm tra xem ngày của thời hạn có trong quá khứ không, nếu có, sau đó hiển thị dự án đã đóng - hoặc cập nhật dự án đã đóng, ngay trước khi hiển thị.

Thực sự không có lý do gì để cập nhật dữ liệu độc lập với ứng dụng PHP của bạn.

Thông thường, những thứ duy nhất bạn muốn lên lịch là các công việc sẽ ảnh hưởng đến ứng dụng của bạn về tải, hoặc chỉ cần thực hiện một lần hoặc đồng thời hoặc thời gian là một vấn đề.

Trong trường hợp của bạn, không trường hợp nào trong số đó được áp dụng.

PS: Tôi chưa thử PHPscheduler nhưng tôi có thể đoán nó không phải là một bộ lập lịch thực sự. Cron là một deamon mà ngủ cho đến khi một nhiệm vụ nhất định là do trong hàng đợi của nó, thực hiện nhiệm vụ, sau đó ngủ cho đến khi một kế tiếp là do (ít nhất đó là những gì nó làm trong thuật toán hiện hành). PHP không thể làm điều đó mà không có các ổ cắm và mở rộng ngã ba, như thiết lập đặc biệt. Vì vậy, PHPscheduler rất có thể chỉ kiểm tra nếu một ngày cho một nhiệm vụ đã hết hạn, trên mỗi tải của một trang web (bất cứ khi nào PHP thực hiện một trang). Điều này là không khác nhau sau đó bạn chỉ cần kiểm tra nếu ngày trên dự án đã hết hạn, mà không có chi phí của PHPScheduler.

+0

Đối PHPScheduler để hoạt động bình thường, bạn cần phải khởi tạo bộ lập lịch để kiểm tra công việc thường xuyên, được thực hiện bằng cách đặt một số mã trên một trang đang hoạt động. Vì vậy, nếu bạn nhận được một lần xem trang mỗi giờ, bạn có thể lập lịch một công việc để chạy hàng giờ, nhưng không phải là tối thiểu. Không phải là một giải pháp tôi muốn giới thiệu cho các công việc quan trọng. – DavidScherer

1

Đối với công việc Windows CRON Tôi không thể đề xuất PyCron đủ.

+0

+1: Tôi cũng đã thành công với nó. –

0

Trong khi CRON và Windows Scheduled Tasks là những cách cố gắng và đúng công việc lập kế hoạch công việc/nhiệm vụ để chạy thường xuyên, có những trường hợp sử dụng có nhiệm vụ được lên lịch khác trong CRON/Windows có thể trở nên tẻ nhạt. Cụ thể là khi bạn muốn cho phép người dùng lên lịch cho mọi thứ để chạy hoặc cho các trường hợp bạn muốn đơn giản/bảo trì/tính di động/etc hoặc tất cả những điều trên.

Trong trường hợp tôi không muốn sử dụng CRON/Windows cho các tác vụ đã lên lịch, tôi xây dựng vào ứng dụng một hệ thống lập lịch tác vụ. Điều này vẫn yêu cầu 1 công việc CRON hoặc Windows Task được lên kế hoạch. Ý tưởng là lưu trữ chi tiết công việc trong cơ sở dữ liệu (tên công việc, thuộc tính công việc, thời gian chạy cuối cùng, khoảng thời gian chạy, bất kỳ điều gì khác quan trọng đối với việc triển khai của bạn). Sau đó, bạn lên lịch một công việc "Master" trong CRON hoặc Windows để xử lý tất cả các công việc khác của bạn cho bạn. Bạn sẽ cần công việc tổng thể này để chạy ít nhất là thường xuyên như là khoảng thời gian ngắn nhất của bạn; nếu bạn muốn có thể lên lịch các công việc chạy mỗi phút, công việc chính cần chạy mỗi phút.

Sau đó, bạn có thể khởi chạy từng công việc theo lịch trình trong nền từ PHP với nỗ lực tối thiểu (nếu bạn muốn). Trong các hệ thống bị hạn chế về bộ nhớ, bạn có thể monitor memory usage hoặc theo dõi các PID (các phương pháp khác nhau) và giới hạn ở N công việc đang chạy tại một thời điểm nhất định.

Tôi đã có rất nhiều thành công với phương pháp này, tuy nhiên YMMV dựa trên nhu cầu của bạn và việc triển khai của bạn.

Các vấn đề liên quan