Что лучший способ состоит в том, чтобы удостовериться, что только один экземпляр программы Perl работает?

Для тех, кто не знает, как использовать PDO (исходя из функций mysql_), я сделал очень, очень простую PDO-обертку , которая представляет собой один файл. Он существует, чтобы показать, насколько легко выполнять все обычные приложения, которые необходимо выполнить. Работает с PostgreSQL, MySQL и SQLite.

В основном читайте

, когда вы читаете руководство , чтобы узнать, как использовать функции PDO в реальной жизни, чтобы упростить хранить и извлекать значения в нужном формате.

Мне нужен один столбец

$count = DB::column('SELECT COUNT(*) FROM `user`);

Мне нужны результаты массива (key => value) (т. е. для создания selectbox)

$pairs = DB::pairs('SELECT `id`, `username` FROM `user`);

Мне нужен результат одной строки

$user = DB::row('SELECT * FROM `user` WHERE `id` = ?', array($user_id));

Мне нужен массив результатов

$banned_users = DB::fetch('SELECT * FROM `user` WHERE `banned` = ?', array(TRUE));

24
задан codeforester 22 February 2019 в 04:30
поделиться

3 ответа

Существует много способов сделать это. Файлы PID являются традиционным способом сделать это. Вы могли также держать блокировку на файле, например, сама программа. Эта маленькая часть кода добьется цели:

use Fcntl ':flock';
open my $self, '<', $0 or die "Couldn't open self: $!";
flock $self, LOCK_EX | LOCK_NB or die "This script is already running";

Одно преимущество перед файлами PID состоит в том, что файлы автоматически разблокированы, когда программа выходит. Намного легче реализовать надежным способом.

39
ответ дан 28 November 2019 в 23:10
поделиться

Сделайте старый прием файла PID.

  • запускаются, процесс
  • видят, существует ли файл, названный "myprog. PID"
  • проверка на существование выполнения proc. с соответствием использованию PID уничтожает 0, $pid
  • , если прогр название PID proc. соответствия, жалуйтесь громко, и выход
  • в противном случае моются устаревший "myprog. PID"
  • создает файл, названный "myprog. PID" и затем продолжается

аплодисменты HTH

,

Rob

10
ответ дан Rob Wells 28 November 2019 в 23:10
поделиться

Все опции, которые Вы перечисляете, прекрасны. Одна вещь с этим, хотя, состоит в том, чтобы знать, что в редких случаях, можно закончить с процессом, который работает в течение очень долгого времени (т.е. застрявшее ожидание на чем-то). Вы могли бы хотеть думать о том, чтобы следить, сколько времени другой рабочий экземпляр выполнял и возможно отправляет себе предупреждение, если он превышает определенное количество времени (такого как день, возможно).

2
ответ дан Scott Hoffman 28 November 2019 в 23:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: