В Debian я написал простой сценарий инициализации для приложения Pyramid, используя pserve. Я не уверен на 100%, что он полный / правильный, но пока работает:
DAEMON="/home/project/.virtualenvs/project/bin/pserve /home/project/production.ini"
PIDFILE=/home/project/project.pid
USER=project
GROUP=project
CWD=/home/project
LOGFILE=/home/project/project.appserver.log
case "$1" in
start|stop|restart|status)
echo "$1 project app server: "
cd $CWD
$DAEMON $1 --pid-file=$PIDFILE --user=$USER --group=$GROUP --log-file=$LOGFILE
RETVAL=$?
if [ "$RETVAL" -eq "0" ]; then
echo "Success"
fi
;;
*)
echo "Usage: /etc/init.d/project {start|stop|restart|status}"
exit 1
;;
esac
exit 0
Когда я вхожу в систему как root, я могу без проблем выполнить следующее:
~# service project start
start project app server:
Changing user to project:project (200:1001)
Entering daemon mode
Success
Я добавил в конфигурацию Puppet для машины следующее:
file { '/etc/init.d/project':
ensure => present,
group => 'root',
mode => 'a=rx,u+w',
owner => 'root',
source => 'puppet:///modules/project/project.init',
}
service { 'project':
enable => true,
ensure => running,
require => File['/etc/init.d/project'],
}
Однако когда я бегу puppet agent --test
, служба не остается в рабочем состоянии. Когда я смотрю в файл журнала проекта, я вижу следующее:
...
File "/home/project/.virtualenvs/project/lib/python2.7/site-packages/project-0.0-py2.7.egg/project/model/__init__.py", line 1, in <module>
from base import Base, DBSession, initialize_sql
File "/home/project/.virtualenvs/project/lib/python2.7/site-packages/project-0.0-py2.7.egg/project/model/base.py", line 1, in <module>
from sqlalchemy import Column, engine_from_config
File "build/bdist.linux-x86_64/egg/sqlalchemy/__init__.py", line 52, in <module>
File "build/bdist.linux-x86_64/egg/sqlalchemy/types.py", line 33, in <module>
except NameError:
File "build/bdist.linux-x86_64/egg/sqlalchemy/processors.py", line 98, in <module>
File "build/bdist.linux-x86_64/egg/sqlalchemy/cprocessors.py", line 7, in <module>
File "build/bdist.linux-x86_64/egg/sqlalchemy/cprocessors.py", line 4, in __bootstrap__
File "build/bdist.linux-i686/egg/pkg_resources.py", line 882, in resource_filename
File "build/bdist.linux-i686/egg/pkg_resources.py", line 1351, in get_resource_filename
File "build/bdist.linux-i686/egg/pkg_resources.py", line 1373, in _extract_resource
File "build/bdist.linux-i686/egg/pkg_resources.py", line 962, in get_cache_path
File "build/bdist.linux-i686/egg/pkg_resources.py", line 928, in extraction_error
pkg_resources.ExtractionError: Can't extract file(s) to egg cache
The following error occurred while trying to extract file(s) to the Python egg
cache:
[Errno 13] Permission denied: '/root/.python-eggs'
The Python egg cache directory is currently set to:
/root/.python-eggs
Как я уже отмечал, вход в систему как root и запуск, кажется, работают нормально. Я бы предположил, что Puppet делает что-то подобное. Что недостает?
Проблема в том, что ваш кеш яиц Python пытается записать в корневой каталог. Добавьте в свой сценарий следующее.
export PYTHON_EGG_CACHE=/var/tmp