Понедельник, 16 Ноября 2009 г. 11:11
+ в цитатник
Есть некоторый скрипт, который периодически (например раз в 3 минуты) запускается по крону. Он делает некоторую работу и переписывает некоторые конфиги, но заранее неизвестно сколько он будет работать и за 3 минуты он может не закончить. Я не хочу чтобы одновременно их запускалось несколько - смысла в этом нет. Поэтому в начале скрипта -
use Unix::PID '/var/run/my-config-build.pid';
Не смотря на это, однако, периодически вижу десяток запущенных экземпляров скрипта. В это время нагрузка (по LA) заметно повышатся, но является ли это причиной ли следствием я не знаю.
От выбора модуля для создания pid файлов это поведение не зависит - проверял около года назад перебором 3-4х модулей. Скрипт запускается от рута, пид файл действительно создается и если проверить вручную - обычно можно убедится что он не дает запустить две копии одновременно. Но иногда - дает.
Вопросы - со стороны ли модуля перла у меня проблема, какой модуль лучше использовать для этого, что я делаю не так?
upd: Похоже все просто, вместо
use Unix::PID '/var/run/this.pid';
надо делать
use Unix::PID;
Unix::PID->new()->pid_file_no_unlink('/var/run/this.pid')
or die 'The PID in /var/run/this.pid is still running.';
Однако почему оно по дефолту не такое, причем везде - для меня загадка.
Метки:
странности с unix::pid
русский перл
язык программирования
-
Запись понравилась
-
0
Процитировали
-
0
Сохранили
-