2010-04-14 64 views
11

Tôi có một tập lệnh nghe một máy chủ jabber và trả lời tương ứng. Mặc dù nó không phải dừng lại, đêm qua nó đã làm. Bây giờ tôi muốn chạy một cron job mỗi phút để kiểm tra xem script có đang chạy hay không và bắt đầu nó nếu không.Kiểm tra xem tập lệnh php có đang chạy không

Câu hỏi đặt ra là, làm cách nào để kiểm tra xem một tập lệnh cụ thể có đang chạy không?

Một số giải pháp đã được đăng here, nhưng tất cả đều dành cho Linux, trong khi tôi đang tìm giải pháp Windows. Bất kỳ ý tưởng xin vui lòng? Cảm ơn.

Trả lời

4

Cách giải quyết nhanh chóng và dơ bẩn có thể cho tập lệnh cập nhật hàng trong cơ sở dữ liệu với cột ngày được đặt thành CURRENT_TIMESTAMP. Hãy kiểm tra tập lệnh cron thứ hai nếu dấu thời gian của hàng này gần đây.

+0

tôi có thể sử dụng workaround đó như là một phương sách cuối cùng. Có bất kỳ kịch bản shell Windows nào sẽ thực hiện công việc này không? – Nirmal

+0

Kịch bản shell của Windows ít thân thiện với người dùng hơn so với JCL và điều đó đang nói điều gì đó, vì vậy tôi e rằng tôi không thể giúp bạn ở đó. Bạn có thể thử nhìn vào PowerShell mặc dù điều này có vẻ hữu ích. – Danten

0

Đây là những gì tôi thường làm:

  1. tạo một thư mục trạng thái, ví dụ:/data/status/
  2. trên kịch bản của tôi, có nó kiểm tra nếu tập tin tình trạng là tồn tại
    1. nếu nó không tồn tại, hãy thoát tập lệnh
    2. nếu không tồn tại, hãy tiếp tục quá trình

Tuy nhiên, có sự cố trong trường hợp này: Điều gì sẽ xảy ra nếu tập lệnh chết và không xóa tệp trạng thái?

Bạn có thể thêm một chút lưu kiểm tra như thế này:

  1. Đối với mỗi phút, tình trạng cập nhật tập tin
  2. Đối với mỗi đầu cron, kiểm tra xem tập tin tình trạng là cuối cùng ví dụ như cập nhật: 10 hoặc 30 phút trước (chúng ta có thể giả định rằng script cron của chúng ta đã chết), chúng ta có thể bắt đầu script cron.
0

tôi đã cùng một vấn đề và tôi giải quyết với mã này:

file_put_contents("status.txt","ping"); 

tôi đặt nó bên trong vòng lặp kịch bản của tôi

vậy, tôi kiểm tra ngày sửa đổi cuối cùng của tập tin để xem tập lệnh có đang hoạt động

để không quá tải HD mà bạn có thể làm như sau:

$i++ 
if($i%100 == 0) 
    file_put_contents("status.txt","ping"); 

này sẽ ghi các file khi $ i == 100 hoặc 200 hoặc 300 vv ...

đây là một workaround

+0

Cách này hiệu quả hơn việc cập nhật trường dấu thời gian trong cơ sở dữ liệu? Tôi nghĩ rằng việc cập nhật một db là tốt hơn cho nó có cơ chế khóa riêng của nó. Trong khi chúng ta có thể kết thúc trong một bế tắc nếu chúng ta phụ thuộc vào một tập tin. Hãy sửa tôi nếu tôi sai. – Nirmal

+0

Tôi đã chạy nhiều tập lệnh trên sổ ghi chép của mình.Để truy cập mysql từ máy tính của tôi, tôi sẽ phải cài đặt PHP. Điều này trở nên không cần thiết khi tôi làm việc chỉ với một tệp văn bản. Nhưng, mỗi trường hợp cần được xử lý riêng. – Leo

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