O problema é seu cache de ovo python, tentando gravar no diretório raiz. Adicione o seguinte ao seu script.
export PYTHON_EGG_CACHE=/var/tmp
No Debian, escrevi um script de inicialização simples para um aplicativo Pyramid usando o pserve. Não tenho 100% de certeza de que está completo / correto, mas funciona por enquanto:
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
Quando faço login como root, posso executar o seguinte sem problemas:
~# service project start
start project app server:
Changing user to project:project (200:1001)
Entering daemon mode
Success
Eu coloquei o seguinte na configuração do meu Puppet para a máquina:
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'],
}
No entanto, quando executo puppet agent --test
, o serviço não é deixado em estado de execução. Quando eu olho no arquivo de log do projeto, vejo o seguinte:
...
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
Como eu observei, logar como root e iniciá-lo parece funcionar bem. Eu imagino que Puppet faz algo similar. Qual é a peça que falta?
O problema é seu cache de ovo python, tentando gravar no diretório raiz. Adicione o seguinte ao seu script.
export PYTHON_EGG_CACHE=/var/tmp