Думая, что индексирование Sphinx успешно выполняется в командной строке, но не выполняется в задании Cron - PullRequest
4 голосов
/ 31 июля 2010

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

Вот мой crontab:

$ crontab -l
# m h  dom mon dow   command
* * * * * cd /var/www/app/current && /usr/local/bin/rake RAILS_ENV=production thinking_sphinx:index >> /var/www/app/current/log/cron.log 2>&1

Вот вывод журнала (фактически он появляется 3 раза за вызов):

Sphinx cannot be found on your system. You may need to configure the following
settings in your config/sphinx.yml file:
  * bin_path
  * searchd_binary_name
  * indexer_binary_name

For more information, read the documentation:
http://freelancing-god.github.com/ts/en/advanced_config.html

Это когда я запускаю ту же команду вручную (также работает при ведении журнала):

$ cd /var/www/app/current && /usr/local/bin/rake RAILS_ENV=production thinking_sphinx:index
(in /var/www/app/releases/20100729042739)
Generating Configuration to /var/www/app/releases/20100729042739/config/production.sphinx.conf
Sphinx 0.9.9-release (r2117)
Copyright (c) 2001-2009, Andrew Aksyonoff

using config file '/var/www/app/releases/20100729042739/config/production.sphinx.conf'...
indexing index 'app_core'...
collected 5218 docs, 3.9 MB
collected 5218 attr values
sorted 0.0 Mvalues, 100.0% done
sorted 0.7 Mhits, 100.0% done
total 5218 docs, 3898744 bytes
total 0.616 sec, 6328760 bytes/sec, 8470.28 docs/sec
distributed index 'app' can not be directly indexed; skipping.
total 3 reads, 0.008 sec, 1110.2 kb/call avg, 2.6 msec/call avg
total 15 writes, 0.016 sec, 540.4 kb/call avg, 1.0 msec/call avg
rotating indices: succesfully sent SIGHUP to searchd (pid=20101).

Также актуально:

$ which rake        
/usr/local/bin/rake

<code>$ which indexer
/usr/local/bin/indexer
Ошибка встречается довольно часто, но пахнет странно, что она отлично работает из командной строки, я подозреваю, что-то еще странное. У меня есть 2 другие критически важные задания cron, которые запускают грабли, которые выглядят одинаково и работают нормально, не уверен, что в этом отличия. Любая помощь будет принята с благодарностью!

PS - существует ли для этого авторитетная конфигурация развертывания в текущих версиях Capistrano и TS? Кажется, что все катят свои собственные, и официальные документы кажутся такими же своеобразными, как и сообщения в блоге.

Ответы [ 2 ]

6 голосов
/ 31 июля 2010

Является ли crontab тем же пользователем, что и пользователь, вошедший в систему, как при ручном запуске?

Поскольку это кажется очевидной проблемой PATH, а cron работает с ограниченным PATH (т. Е. Не тем, что находится в вашем .profile), попробуйте добавить это в начало файла crontab.

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin

Или, если вы не хотите модифицировать PATH cron, вы можете использовать символические ссылки для нужных файлов в / usr / sbin, который по умолчанию находится в PATH.

0 голосов
/ 28 июня 2011

Я могу подтвердить, что у меня была похожая ошибка, такая как @kbighorse, когда команды запускались вручную в командной строке, но не запускались из задания cron.Я не получил никаких ошибок, но файл журнала будет выводить только каталог, из которого выполнялась команда sphinx.Когда я добавлю следующую переменную пути из @jdl в начало файла crontab, задание cron будет работать правильно:

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
...