Предотвращение повторного запуска Rake-скрипта

25 февраля 2010, обновлена 26 февраля 2010

А еще мне нужно было сделать так, чтобы долгоиграющий Rake-скрипт не запускался повторно (по крону). Я это сделал с помощью PID-файла, хотя не исключаю, что есть варианты и попроще.

В начале задачи – проверяем, запущена ли она уже, и если нет, создаем PID-файл.

pid_filename = "#{RAILS_ROOT}/tmp/#{task.name.gsub ':', '.'}.pid" # или любой другой
 
if File.exists?(pid_filename) && system("kill -0 #{File.read(pid_filename).to_i}")
  fail "Task already running"
else
  File.open(pid_filename,'w') {|f| f.write(Process.pid) }
end

В конце задачи – удаляем PID-файл:

File.unlink(pid_filename) rescue nil


Один комментарий. Напиши еще один
  1. 9eb85605870a241e7fdf86bae546dbba # 26 февраля 2010 Sych (php.com.ua) написал:

    На хабре было красивое кроссплатформенное решение этой проблемы на php с помощью файловой блокировки -думаю что на любом языке можно имплементировать предложенную схемку

(нужна разметка?)

  • **жирный**
  • > цитата

отменить