O Puppet não consegue iniciar o serviço que pode ser iniciado manualmente?

2

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?

    
por dave mankoff 31.10.2012 / 14:11

1 resposta

2

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
    
por 31.10.2012 / 14:21