我很好奇,有什么我需要注意的是,当从初始化脚本使用service作为后台作业产卵过程?
这是在terminal工作的行,在bash脚本/ init脚本中,但是在使用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.
由于工作目录不正确,logging了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 &terminal和一个bash脚本运行没有问题,或者即使我从terminal执行初始化脚本。 只有当我使用service celerydsvcname start ,我碰到这个工作目录问题。
这个过程是否在前台或后台产生(通过service )并不重要,这个问题是持续的。
运行service来执行init脚本时,进程上下文是如何改变的?
谢谢!
马特
[更新]
该脚本指的是HOME环境variables。 service启动服务为env -i PATH="$PATH" TERM="$TERM" "/etc/init.d/celerydsvcname" start ,其中-i忽略当前环境。 这意味着我不能指望环境variables出现在service开始的环境中,除非我设定它们。 学过的知识。
我已经通过添加解决了rhodecode – init.d的问题
export HOME=/home/ak
到init.d脚本。