См. Описание Mozilla с примером: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video
Хотя это непосредственно не отвечает на Ваш вопрос, на вашем месте я, вероятно, записал бы сценарий демона (Вы могли использовать http://daemons.rubyforge.org/),
У Вас мог быть свой индексатор (принимающий его indexer.rb) быть выполненными через сценарий обертки, названный сценарием/индексом, например:
require 'rubygems'
require 'daemons'
Daemons.run('indexer.rb')
И Ваш индексатор может сделать, почти то же самое, кроме Вас указывают интервал сна
loop do
# code executing your indexing
sleep INDEXING_INTERVAL
end
Это - то, как обычно функционируют процессоры задания в тандеме с сервером очереди.
Если Ваш крон использования, могло бы быть легче сделать что-то вроде этого в сценарии оболочки, который называет крон:
#!/usr/local/bin/bash
#
if ps -C $PROGRAM_NAME &> /dev/null ; then
: #Program is already running.. appropriate action can be performed here (kill it?)
else
#Program is not running.. launch it.
$PROGRAM_NAME
fi
Существует lockfile драгоценный камень для точно этой ситуации. Я использовал его прежде, и это очень просто.
Вы могли создать и удалить временный файл и проверку на существование этого файла. Проверьте ответ на этот вопрос: один сценарий оболочки экземпляра
Разве Вы не можете добавить File::LOCK_NB к своей блокировке, для создания этого неблокированием (т.е. это перестало работать, если это не может получить блокировку),
Это работало бы в C, Perl и т.д.
Хорошо, отделываясь от примечаний от указателя @shodanex, вот то, что я имею. Я rubied это немного (хотя я не знаю о сенсорном аналоге в Ruby).
tmp_file = File.expand_path(File.dirname(__FILE__)) + "/indexer.lock"
if File.exists?(tmp_file)
puts "quitting"
exit
else
`touch #{tmp_file}`
end
.. do stuff ..
File.delete(tmp_file)