Làm thế nào để làm cho Perl chỉ làm việc trong một bản sao

Nhiệm vụ

Đôi khi nó là cần thiết để viết một Perl đó chỉ chạy nếu này giống kịch bản là không làm việc. I. e. để đảm bảo rằng tại một thời điểm này của thời gian, chỉ dụ của kịch bản này.

Ví dụ, vấn đề này có thể xảy ra nếu kịch bản là chạy cho vương miện mỗi phút và đôi khi nó có thể chạy nhiều hơn một phút.

Ở đây chúng tôi đang nói về những trường hợp khi kịch bản hoạt động trên một máy chủ và bạn muốn đảm bảo thực hiện là không hơn một ví dụ của kịch bản cùng máy.

Quyết định

Cách dễ nhất để giải quyết vấn đề này là để sử dụng Perl thư viện Sys::RunAlone.

Thư viện sẽ đến với Perl, nó cần phải được cài đặt thêm.

Để làm cho một kịch bản mà chỉ làm việc trong một ví dụ, bạn cần thêm trong hiện tại kịch bản use Sys::RunAlone;__END__.

Đây là một ví dụ về một kịch bản mà chỉ làm việc trong một ví dụ:

#!/usr/bin/perl

use Sys::RunAlone;

print "working\n";

sleep 10;

__END__

Nếu bạn chạy kịch bản này, nó hiển thị các văn bản working và 10 giây để treo và chờ đợi và sau đó thoát ra.

Nếu bạn mở một điều khiển và trong khi các kịch bản là chạy thử chạy lại lần nữa chạy này sẽ thất bại, và không có mã từ kịch bản sẽ không được thực hiện:

$ perl script.pl
A copy of 'script.pl' is already running

Đơn vị __END__ trong kịch bản là bắt buộc. Thư viện Sys::RunAlone sử dụng này các đơn vị để mất Locke. Và nếu khối này là không, và thư viện Sys::RunAlonekết nối kịch bản sẽ không làm việc, màn hình hiển thị lỗi Add __END__ to end of script 'script.pl' to be able use the features of Sys::RunALone.

Các bài viết khác