使用服务启动初始化脚本时工作目录是否存在问题?

使用服务启动初始化脚本时工作目录是否存在问题?

我很好奇,当使用从初始化脚本生成进程作为后台作业时,我需要注意什么service

这是在终端、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.

由于工作目录不正确,所以记录了 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 脚本运行不会出现问题,即使我从终端执行 init 脚本也不会出现问题。只有当我使用时,service celerydsvcname start我才会遇到此工作目录问题。

无论该进程是service在前台还是后台生成(通过),该问题仍然存在。

service运行使用来执行初始化脚本时,进程上下文是如何改变的?

谢谢!

马特

[更新]

该脚本引用了 HOME 环境变量。以service启动服务env -i PATH="$PATH" TERM="$TERM" "/etc/init.d/celerydsvcname" start,其中-i忽略当前环境。这意味着我不能指望环境变量存在于以 启动的环境中service,除非我设置它们。吸取教训。

答案1

我已经通过添加解决了 rhodecode - init.d 的问题

export HOME=/home/ak

init.d脚本。

相关内容