Назад | Перейти на главную страницу

Есть ли проблема с рабочим каталогом при использовании службы для запуска сценария инициализации?

Мне любопытно, есть ли что-то, на что мне нужно обратить внимание при создании процесса в качестве фоновых заданий из сценариев инициализации с использованием service?

Вот строка, которая работает на терминале в сценарии bash / сценарии инициализации, но не запускается при использовании chkconfig: service celerydsvcname start

/var/www/rhodecode-venv/bin/paster celeryd /var/www/rhodecode/production.ini --pidfile=/var/run/celeryd.pid -f /var/log/celerydpaster.log -l WARNING -q &

Некоторые интересные решения, которые я сделал:

cd /var/www/rhodecode-venv/bin
/var/www/rhodecode-venv/bin/paster celeryd /var/www/rhodecode/production.ini --pidfile=/var/run/celeryd.pid -f /var/log/celerydpaster.log -l WARNING -q &
sleep 2
ls -l /proc/$(pgrep paste)/cwd
echo Done.

Я получаю следующее:

Traceback (most recent call last):
  File "/var/www/rhodecode-venv/bin/paster", line 8, in <module>
    load_entry_point('PasteScript==1.7.4.2', 'console_scripts', 'paster')()
  File "/var/www/rhodecode-venv/lib/python2.6/site-packages/PasteScript-1.7.4.2-py2.6.egg/paste/script/command.py", line 103, in run
    command = commands[command_name].load()
  File "build/bdist.linux-i686/egg/pkg_resources.py", line 1954, in load
  File "/var/www/rhodecode-venv/lib/python2.6/site-packages/RhodeCode-1.2.2-py2.6.egg/rhodecode/__init__.py", line 39, in <module>
    _rev = get_current_revision(quiet=True)
  File "/var/www/rhodecode-venv/lib/python2.6/site-packages/RhodeCode-1.2.2-py2.6.egg/rhodecode/lib/__init__.py", line 403, in get_current_revision
    except (ImportError, RepositoryError, VCSError), err:
UnboundLocalError: local variable 'RepositoryError' referenced before assignment
lrwxrwxrwx. 1 root root 0 Oct 27 11:34 /proc/12265/cwd -> /var/www/rhodecode-venv/bin
Done.

Ошибка python регистрируется, потому что рабочий каталог неверен; но он считается правильным ls -l /proc/$(pgrep paste)/cwd!

Опять же, обратите внимание, что /var/www/rhodecode-venv/bin/paster celeryd /var/www/rhodecode/production.ini --pidfile=/var/run/celeryd.pid -f /var/log/celerydpaster.log -l WARNING -q & запускается без проблем с терминала и сценария bash, или даже если я выполняю сценарий инициализации с терминала. Только когда я использую service celerydsvcname start что я столкнулся с этой проблемой рабочего каталога.

Не имеет значения, порожден процесс или нет (через service) на переднем или заднем плане проблема не устранена.

Как изменяется контекст процесса при запуске с использованием service выполнить сценарий инициализации?

Спасибо!

Мэтт

[обновлено]

Скрипт ссылается на переменную окружения HOME, для которой. service запускает службу как env -i PATH="$PATH" TERM="$TERM" "/etc/init.d/celerydsvcname" start, где -i игнорирует текущую среду. Это означает, что я не могу ожидать, что переменные среды будут присутствовать в среде, которая началась с service, если я их не установил. Урок выучен.

Я решил проблему с rhodecode - init.d, добавив

export HOME=/home/ak

к init.d сценарий.