04 febrero 2016

Análisis de rendimiento de Tryton

Análisis de rendimientode Tryton

En esta entrada vamos a enseñar como se realiza un análisis de rendimiento de una acción de Tryton. Para ello vamos a utilitzar la librería cProfile que nos facilita el propio lenguaje de programación Python.

Lo primero que haremos será declarar la siguiente función al principio del fichero trytond/trytond/protocols/dispatcher.py
import cProfile
def do_cprofile(func):
    def profiled_func(*args, **kwargs):
        profile = cProfile.Profile()
        try:
            profile.enable()
            result = func(*args, **kwargs)
            profile.disable()
            return result
        finally:
             for arg in args:
                print arg
            profile.print_stats()
    return profiled_func
Y justo encima de la función dispatch, añadimos el decorador do_cprofile de esta forma
@do_cprofile
def dispatch(host, port, protocol, database_name, user, session, object_type,
        object_name, method, *args, **kwargs):
    [...]
A continuación arrancamos el servidor Tryton tunelizando la salida estandard a un fichero para poder leerlo posteriormente:
$ ./bin/trytond -c trytond/etc/trytond.conf > /tmp/logs.txt
Una vez arrancado el servidor nos conectamos con el cliente de escritorio y ejecutamos la acción que queremos analizar y finalmente abrimos el fichero donde hemos volcado la salida del análisis para estudiarla.
$ pluma /tmp/logs.txt
 En dicho fichero podremos ver algo como esto:

[1]
::1
56894
JSON-RPC
db_name
1
c428287398bd415da1a8fff1422a69e1
model
product.template
read
[25278]
[u'customer_taxes', u'code', u'list_price', u'width_digits', u'weight', u'taxes_category', u'thumb_filename', u'height', u'review_location', u'magento_attribute_configurables', u'default_uom', u'template_attribute_set', u'direct_stock_supply', u'height_digits', u'category', u'manufacturer_name', u'thumb', u'review_types', u'purchasable', u'review', u'salable', u'forecast_quantity', u'esale_active', u'width', u'height_uom', u'length_uom', u'base_code', u'products', u'magento_product_type', u'technical_description', u'type', u'cost_price', u'weight_digits', u'product_suppliers', u'length_digits', u'review_description', u'sale_uom', u'esale_available', u'unique_variant', u'purchase_uom', u'width_uom', u'supplier_taxes', u'active', u'medicament', u'consumable', u'list_price_supplier', u'default_uom_category', u'manufacturer', u'delivery_time', u'weight_uom', u'account_expense', u'name', u'account_category', u'esale_slug', u'attachments', u'length', u'attribute_set', u'template_attributes', u'shops', u'account_revenue', u'cost_price_method', u'quantity', u'default_uom.rec_name', u'template_attribute_set.rec_name', u'category.rec_name', u'height_uom.rec_name', u'length_uom.rec_name', u'sale_uom.rec_name', u'purchase_uom.rec_name', u'width_uom.rec_name', u'default_uom_category.rec_name', u'manufacturer.rec_name', u'weight_uom.rec_name', u'account_expense.rec_name', u'attribute_set.rec_name', u'account_revenue.rec_name', u'rec_name', u'_timestamp']
{keys: values}
         8055053 function calls (6667984 primitive calls) in 10.650 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
[...]
        2    0.076    0.038   10.435    5.217 move.py:1120(compute_quantities)
[...]
        2    0.000    0.000   10.457    5.228 move.py:50(_get_quantity)
[...]
        2    0.012    0.006   10.456    5.228 product.py:123(products_by_location)
        2    0.000    0.000   10.463    5.231 product.py:14(get_quantity)
        2    0.000    0.000   10.486    5.243 product.py:14(sum_product)
[...]
        2    0.000    0.000   10.462    5.231 product.py:29(get_quantity)
        2    0.000    0.000   10.474    5.237 product.py:34(sum_product)
[...]
        2    0.000    0.000   10.462    5.231 product.py:54(get_quantity)
[...]
        2    0.000    0.000   10.457    5.228 product.py:94(get_quantity)
[...]
En este caso vemos que el método read del modelo product.template se ejecuta 2 veces y cada una de las veces ha tardado unos 5 segundos.

24 enero 2016

Crear un entorno de desarrollo aislado Python con virtualenwrapper

Hoy vamos a preparar un entorno de desarrollo aislado para Python con virtualenvwrapper. Esto ayuda a aislar sus dependencias de otros entornos de desarrollo, especialmente cuando se utiliza con pip, de forma que se pueden tener distintos entornos sin problemas de dependencias. virtualenvwrapper ofrece algunos comandos shell para facilitar el uso de dichos entornos.

Instalación


Para instalarlo, lo primero que hay que hacer es abrir una consola y ejecutar el siguiente comando:
$ sudo aptitude install virtualenvwrapper

Configuracion

Una vez instalado, la configuración pasa por añadir al fichero ~/.bashrc un par de líneas de código que definirán una variable de entorno y ejecutaran un script al iniciar una terminal. Para ello abriremos un editor de texto cualquiera
$ nano ~/.bashrc
y añadiremos las siguientes dos líneas al final del fichero:

export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/workspace
source /usr/local/bin/virtualenvwrapper.sh # [1]

[1] Cambia la ruta a virtualenvwrapper.sh para que coincida con la de tu instalación.
WORKON_HOME es el directorio donde virtualenvwrapper va a almacenar los entornos virtuales que crees.

Ayuda

Para ver todos los comandos que proporciona virtualenvwrapper puedes ejecutar dicho comando en una consola:
$ virtualenvwrapper

virtualenvwrapper is a set of extensions to Ian Bicking's virtualenv
tool.  The extensions include wrappers for creating and deleting
virtual environments and otherwise managing your development workflow,
making it easier to work on more than one project at a time without
introducing conflicts in their dependencies.

For more information please refer to the documentation:

    http://virtualenvwrapper.readthedocs.org/en/latest/command_ref.html

Commands available:

  add2virtualenv: add directory to the import path

  allvirtualenv: run a command in all virtualenvs

  cdproject: change directory to the active project

  cdsitepackages: change to the site-packages directory

  cdvirtualenv: change to the $VIRTUAL_ENV directory

  cpvirtualenv: duplicate the named virtualenv to make a new one

  lssitepackages: list contents of the site-packages directory

  lsvirtualenv: list virtualenvs

  mkproject: create a new project directory and its associated virtualenv

  mktmpenv: create a temporary virtualenv

  mkvirtualenv: Create a new virtualenv in $WORKON_HOME

  rmvirtualenv: Remove a virtualenv

  setvirtualenvproject: associate a project directory with a virtualenv

  showvirtualenv: show details of a single virtualenv

  toggleglobalsitepackages: turn access to global site-packages on/off

  virtualenvwrapper: show this help message

  wipeenv: remove all packages installed in the current virtualenv

  workon: list or change working virtualenvs

Creación

Ahora ya puedes crear un nuevo entorno virtual para un proyecto
$ mkproject my_project
Esto, además de crear el nuevo projecto, nos activará el entorno virtual y nos moverá a su directorio de trabajo.

Manejo

Una vez creado el entorno virtual, para activarlo podemos ejecutar:
$ workon my_project
y para desactivarlo se utiliza el mismo comando que el utilizado para virtualenv
$ deactivate

Personalización del PYTHONPATH

Si queremos cambiar el PYTHONPATH utilizado en un virtualenv, podemos añadir la siguiente línea a nuestro archivo ~/.virtualenvs/my_project/bin/activate:
export PYTHONPATH="/the/path/you/want"
Para restablecer el PYTHONPATH original cuando se desactive el entorno virtual, podemos añadir

export OLD_PYTHONPATH="$PYTHONPATH"
Antes de la línea mencionada anteriormente y, añadir la siguiente línea al fichero ~/.virtualenvs/my_project/bin/postdeactivate script.
export PYTHONPATH="$OLD_PYTHONPATH"

02 junio 2015

Crear un entorno de desarrollo aislado para Tryton con virtualenvwrapper en Debian (Jessie).

Primero nos tenemos que asegurar que tenemos instalados los siguientes paquetes:
sudo apt-get install python-pip python-pkg-resources npm libxml2-dev libxslt-dev libsasl2-dev python-distutils-extra python-dev libldap2-dev libssl-dev libjpeg-dev postgresql-server-dev-all libffi-dev postgresql-9.4 freetds-dev virtualenvwrapper
Después debemos crear el entorno virtual con las herramientas que nos proporciona virtualenvwrapper.
cd ~/workspace
mkproject trytond
A continuación tenemos que descargar los siguientes proyectos donde se almacenan las configuraciones de librerías necesarias así como los módulos a instalar del servidor Tryton
hg clone http://bitbucket.org/nantic/tryton-tasks tasks
hg clone http://bitbucket.org/nantic/tryton-config config
hg clone http://bitbucket.org/nantic/nan_tryton_utils utils
Instalamos las librerías de las herramientas de desarrollo (tasks) y del entorno de tryton (config):
cd utils
./script-symlinks.sh
cd ..
pip install -r config/requirements.txt
pip install -r tasks/requirements.txt
touch local.cfg
invoke clone --config config/base.cfg
invoke clone
Miramos que rama tienen los módulos descargados y los actualizamos todos a la misma. Para la rama 3.4 sería:
invoke update branch 3.4
* Puesto que no hay versión 3.4 para los módulos account_stock_landed_cost*, sale_complaint, commission* y sale_promotion, hay que borrarlos.

Desarrollo de aplicaciones web con Flask para Tryton

Para poder desarrollar aplicaciones web utilizando la librería flask_tryton de pypi, tenemos que descargar, descomprimir y desempaquetar la librería en nuestro entorno de desarrollo:
$ wget https://pypi.python.org/packages/source/f/flask_tryton/flask_tryton-0.4.tar.gz
$ tar -xvzf flask_tryton-0.4.tar.gz
$ mv flask_tryton-0.4 flask_tryton
Otra librería que podría interesarnos instalar podría ser flask-restful
$ pip install flask-restful

PYTHONPATH

Finalmente debemos modificar el PYTHONPATH para que apunte a los directorios que contienen trytond, proteus y flask_tryton tal y como se explica en la entrada de creación del entorno virtual con virtualenvwrapper.

Resolución de problemas

Una vez instalado y funcionando el entorno, tras alguna actualización nos podemos encontrar con algunos problemas con el comando invoke. Para solucionarlo se debe instalar una versión inferior a la 0.11:
pip install invoke==0.10
También deberemos ejecutar la clonación de nuevos repositorios desde el directorio config.
workon trytond
cd config
invoke clone -c ./nombre_repositorio.cfg

24 octubre 2011

Forzar resolución en gdm3

Ejecutar el siguiente comando para obtener la línea que se debe añadir a xrandr:



$ gtf 1440 900 60

Donde: 1440 es el número de puntos horizontales.

900 es el número de puntos verticales

Y 60 la tasa de refresco.


Obtendremos algo parecido a esto:

# 1440x900 @ 60.00 Hz (GTF) hsync: 55.92 kHz; pclk: 106.47 MHz
Modeline "1440x900_60.00" 106.47 1440 1520 1672 1904 900 901 904 932 -HSync +Vsync

Crear el nuevo modo con el siguiente comando:

xrandr --newmode "1440x900_60.00" 106.47 1440 1520 1672 1904 900 901 904 932 -HSync +Vsync

Donde, como se puede ver, lo que va después de --newmode está copiado del comando anterior. Ahora debemos ejecutar:

$ xrandr
Screen 0: minimum 64 x 64, current 1440 x 900, maximum 32000 x 32000
VBOX0 connected 1440x900+0+0 0mm x 0mm
1024x768 60.0 + 60.0
1600x1200 60.0
1440x1050 60.0
1280x960 60.0
800x600 60.0
640x480 60.0

Donde podremos ver cual es la salida por defecto, en este caso VBOX0. Y ahora hay que añadir la salida anterior a xrandr:

xrandr --addmode VBOX0 1440x900_60.00

Y finalmente hacer que sea la salida por defecto con:

xrandr --output VBOX0 --mode 1440x900_60.00

27 marzo 2011

Cambiar el usuario y la contraseña del administrador de OpenERP

Para cambiar el nombre del usuario administrador de OpenERP y su contraseña de procederse de la siguiente forma. Abrir una terminal e identificarse como usuario Postgres:
$ sudo su postgres
A continuación hay que entrar en la consola psql
# psql
Y seguidamente conectarse a la base de datos OpenERP cuyo administrador queremos modificar:
# \c nombre_base_datos
Una vez efectuada la conexión se debe dar la siguiente orden:
# update res_users set login='nuevo_admin', password='nueva_contraseña' where login='admin';
Donde nuevo_admin es el nuevo nombre que tendrá el administrador y nueva_contraseña la nueva contraseña. Para comprobar que los cambios se han realizado correctamente sólo queda dar la siguiente orden:
# select * from res_users;

11 septiembre 2010

Instal·lant una versió d'OpenERP en desenvolupament

En aquesta ocasió vaig a explicar com descarregar, instal·lar i provar un programa en estat de desenvolupament com OpenERP, utilitzant el software de control de versions Bazaar allotjat a Launchpad.


El primer que cal fer és instal·lar aquest programa de control de versions. Per fer-ho només cal donar aquesta ordre a la consola:



$ sudo aptitude install bzr

Una vegada instal·lat el programa, anem a la pàgina inicial de launchpad i cerquem el programa que volem provar, en aquest cas OpenERP.



Una vegada trobat el projecte...



Cliquem a sobre de la pestanya Code



I ens sortirà una pàgina on ens dirà l'ordre que tenim que donar per descarregar el projecte



Ara s'ha d'obrir una terminal i escriure aquesta ordre



$ bzr branch lp:openerp

Ens descarregarà dos fitxers que desarà en una carpeta anomenada openerp



Entrem en la carpeta openerp, i comprovem quines opcions d'execució té per baixar la versió que ens interesa executant



$ ./bzr_set.py --help


Veiem que no te gaires opcions. La que ens interessa és -v amb la versió trunk, per tant ordenem



$ ./bzr_set.py -v trunk


Començarà ara a descarregar tot el projecte...


Bé. Aprofitaré el temps per llegir l'arxiu README.txt a veure que diu. Per fer-ho, obriré un altre terminal i a continuació donaré la següent ordre



$ more README.txt

Aquí està el resultat



Vaja!, triga una mica... ¬¬. Tinc que pensar en contractar un servei ADSL més ràpid... M'ho apuntaré per demana'ls-hi als reis d'orient el proper nadal ;-)

Bé, aquest arxiu el que ens diu és que podem modificar les capçaleres del guió per configurar els links de les diferents branques amb les que tenim intenció de treballar, així com afegir els dels mòduls que volem afegir al projecte. Per defecte ens descarregarà el servidor, el client GTK i el client-servidor web, així com els mòduls oficials, els community i els extra. Com que aquests ja em van bé, no em cal tocar res. Menos mal! Amb el que m'ha costat entendre el que diu, i l'estona que porta descarregant, només m'hauria faltat que hagués de tornar a començar de nou. -_-'


Començo a veure alertes en les descàrregues. Suposo que és normal: aquesta és la branca en desenvolupament, i està en estat alfa.



Bé! Ja ha acabat. Ara puc comprovar que, tal com esperava, ha descarregat el servidor, el client GTK i el client-servidor web, a més a més dels mòduls oficial, community i extras. A més, m'ha creat enllaços simbòlics dels mòduls a la carpeta server/bin. Tot correcte. Ja podem començar a provar-ho :-)

14 agosto 2010

Instal·lant un servidor OpenERP

En aquesta entrada descriuré el procediment que he seguit per instal·lar un servidor d'OpenERP en una Ubuntu 10.04 Server de 64 bits

1.- Instal·lació del servidor de bases de dades: PostgreSQL.

1.1.- Instal·lació.

Primer de tot instal·lar el servidor linux. En el cas de l'exemple s'ha instal·lat un Ubuntu 10.04 Server mínim amb el servidor de bases de dades PostgreSQL (sense entorn gràfic ni cap altre servidor dels proposats automàticament en el moment de la instal·lació).

Una vegada finalitzada la instal·lació del servidor linux, instal·lar el servidor i el client de la base de dades PostgreSQL.

# aptitude install postgresql postgresql-client

Per defecte, a la versió d'Ubuntu 10.04 Server, s'instal·la la versió 8.4 de PostgreSQL. Les ordres per arrencar, aturar, reiniciar i conèixer l'estat del dimoni del servidor postgresql són, respectivament:

$ sudo /etc/init.d/postgres-8.4 start
$ sudo /etc/init.d/postgres-8.4 stop
$ sudo /etc/init.d/postgres-8.4 restart
$ sudo /etc/init.d/postgres-8.4 status

1.2.- Configuració.

A continuació cal editar l'arxiu /etc/postgresql/8.4/main/pg_hba.conf per a permetre connexions locals amb usuaris de PostgreSQL diferents dels usuaris de linux:

$ sudo nano /etc/postgresql/8.4/main/pg_hba.conf

Substituir la línia:

local all all ident

per la línia

local all all md5

Finalment reiniciar el servidor de PostgreSQL per a que els canvis siguin efectius:

$ sudo /etc/init.d/postgresql-8.4 restart

1.3.- Creació d'un usuari de PostgreSQL.

Ara s'ha de crear l'usuari de PostgreSQL amb la seva contrasenya i els privilegis per crear bases de dades.

$ sudo su postgres
$ createuser –pwpromtp usuari

Introduir dues vegades la contrasenya i respondre que l'usuari no serà superusuari [n], sí podrà crear bases de dades [y], i no podrà crear nous usuaris [n].

Sortir del shell de l'usuari postgres amb:

$ exit

1.4.-Modificació de la contrasenya de l'usuari postgres.

Per defecte, l'usuari postgres no té configurada cap contrasenya. Per establir contrasenyes, tant d'usuari Unix, com d'usuari Postgres, cal seguir els següents passos (figura 1). Executar el següent comandament:

$ sudo passwd postgres

Que ens demanarà que introduïm la contrasenya d'Unix dues vegades. A continuació ens identifiquem com usuari postgres, entrem en una consola psql i executem les següents ordres:

$ su postgres
$ psql
postgres=# \password postgres

I introduïm novament dues contrasenyes que ens identificaran en l'entorn del servidor PostgreSQL. Per sortir només cal executar els següents comandaments:

postgres=# \q
$ exit

Figura 1. Modificació de la contrasenya de l'usuari postgres

2.- Instal·lació de llibreries de Python i XML

Instal·lar les següents llibreries de Python i XML, necessàries per a la execució del servidor OpenERP amb les seves dependències:

$ sudo aptitude install python python-libxml2 python-libxslt1 python-lxml python-psycopg2 python-imaging python-reportlab python-pyparsing python-pydot graphviz python-matplotlib python-numpy python-tz gs-gpl python-pychart python-egenix-mxdatetime python-vobject

Si s'han de poder enviar emails mitjançant SSL, s'ha d'instal·lar també aquest altre paquet:

$ sudo aptitude install python-openssl

Si en la mateixa màquina s'han d'executar el servidor i el client d'OpenERP, s'ha d'instal·lar també el següent paquet:

$ sudo aptitude install python-hippocanvas

Finalment, per poder instal·lar el mòdul PowerMail, s'ha d'instal·lar python-mako

$ sudo aptitude install python-mako

3.- Instal·lació del servidor OpenERP

3.1.- Descàrrega i instal·lació del paquet.

De la pàgina d'OpenERP, descarregar el paquet de la darrera versió del servidor (en el moment de fer aquest petit manual és la 5.0.12):

$ wget http://www.openerp.com/download/stable/source/openerp-server-5.0.12.tar.gz

Per instal·lar aquest programa, únicament cal descomprimir-lo i desempaquetar-lo al directori /opt. Per fer-ho, primer crearem el directori OpenERP:

$ sudo mkdir /opt/OpenERP

A continució descomprimir i desempaquetar el fitxer amb:

$ sudo tar -xzf openerp-server-5.0.12.tar.gz -C /opt/OpenERP/

Comprovar que el servidor arrenca correctament:

$ /opt/OpenERP/openerp-server-5.0.12/bin/openerp-server.py

El resultat ha de ser més o menys el que es mostra a la figura 2.

Es a dir, ens ha d'informar sobre la versió que estem executant, ens ha d'indicar el directori on s'instal·laran els mòduls, ens informarà del hostname, el port i l'usuari amb que es connecta a la base de dades, i les tres darreres línies ens informen dels ports per on estaran escoltant els protocols XML-RPC i NET-RPC, així com que el servidor s'està executant i està esperant connexions.

Per interrompre l'execució del servidor prémer la combinació de tecles Ctrl + C*.

Figura 2: Execució del servidor OpenERP

* Nota: Si en matar el procés del servidor OpenERP amb Ctrl + C no acaba de morir, s'ha d'obrir un altre terminal virtual (Ctrl + Alt + F2) i s'ha de matar el procés manualment amb:

$ kill -9 `ps xa|grep openerp-server.py|grep python|awk '{print $1}'`

3.2.-Connexió del servidor OpenERP amb la base de dades PostgreSQL.

Per connectar el servidor OpenERP amb la base de dades, s'han d'incloure els següents paràmetres en el comandament d'arrencada: el host, el port i l'usuari i la contrasenya de PostgreSQL. Per defecte s'assumeix que el host és localhost (els servidors OpenERP i PostgreSQL estan a la mateixa màquina), i el port de PostgreSQL és el 5432. Per tant, per connectar amb l'usuari que es va crear anteriorment s'ha d'executar el següent comandament:

$ /opt/OpenERP/openerp-server-5.0.12/bin/openerp-server.py -r usuari -w contrasenya

Si hi hagués instal·lat cap client d'escriptori, ja es podria executar i connectar al servidor OpenERP situat a localhost, pels ports 8069 o 8070 per crear la base de dades inicial i finalitzar de configurar l'aplicació.

3.3.- Arxiu de configuració del servidor OpenERP.

Per crear l'arxiu de configuració automàticament cal executar el mateix comandament d'arrencada del servidor, aquesta vegada però, amb l'opció -s:

$ /opt/OpenERP/openerp-server-5.0.12/bin/openerp-server.py -r usuari -w contrasenya -s

En aquesta ocasió arrencarà el servidor, i a la mateixa vegada crearà l'arxiu .openerp_serverrc a la carpeta de l'usuari.

Caldrà moure aquest arxiu al directori /etc/OpenERP/openerp-server-5.0.12. Per fer-ho, primer s'han de crear els directoris corresponents:

$ sudo mkdir /etc/OpenERP
$ sudo mkdir /etc/OpenERP/openerp-server-5.0.12
$ sudo mv ~/.openerp_serverrc /etc/OpenERP/open-server-5.0.12/.openerp_serverrc

I a continuació s'han de restringir els permisos de lectura d'aquest arxiu per evitar que qualsevol usuari tingui accés a les contrasenyes que emmagatzema. Per fer-ho primer s'ha d'assignar a l'administrador del sistema com propietari del mateix, a continuació cal assegurar-se que només el propietari té permisos de lectura, i finalment s'ha de comprovar el que s'ha fet (figura 3):

$ sudo chown root:root /etc/OpenERP/openerp-server-5.0.12/.openerp_serverrc
$ sudo chmod 600 /etc/OpenERP/openerp-server-5.0.12/.openerp_serverrc
$ ls -la /etc/OpenERP/open-server-5.0.12
Figura 3: Canviant el propietari i els permisos de l'arxiu de configuració.

3.4.- Executant més d'un procés de servidor OpenERP a la mateixa màquina.

Amb la finalitat de poder executar més d'un procés de servidor OpenERP a la mateixa màquina, es poden crear copies de l'arxiu de configuració dintre del mateix directori amb diferents noms, que es poden llegir en el moment d'arrencada del servidor mitjançant l'opció --config. Això permet configurar diferents processos que escolten per ports diferents i que estan connectats a bases de dades distintes.

$ cd /etc/OpenERP/openerp-server-5.0.12/
$ sudo cp .open_serverrc .open_serverrc_empresaA
$ sudo cp .open_serverrc .open_serverrc_empresaB

A continuació caldria editar els arxius creats i modificar-los d'acord a les necessitats de cada empresa.

3.5.- Crear el guió d'arrencada, aturada, re-inici del servidor OpenERP.

Es aconsellable crear un guió que permeti aturar, arrencar, re-iniciar i conèixer l'estat dels processos dels diferents servidors OpenERP.




#!/bin/sh

### BEGIN INIT INFO
# Provides: openerp-server
# Required-Start: $syslog
# Required-Stop: $syslog
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Enterprise Resource Management software
# Description: Open ERP is a complete ERP and CRM software.
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/openerp-server
NAME=openerp-server
DESC=openerp-server

# Assign order (start, stop, restart|force-reload, status)to $ORDER
ORDER="${1}"
shift

# Specify the user name (Default: openerp).
#USER=openerp
if [ -z $1 ]; then
USER="jmartin"
else
USER="$1"
shift
fi

NAME=${NAME}_${USER}

# Specify an alternate config file (Default: ~/.openerp_serverrc).
# CONFIGFILE="~/.openerp_serverrc"
CONFIGFILE="~/.openerp_serverrc"

# Additional options that are passed to the Daemon.
PARAM=""
if [ $# -ge 1 ]; then
while [ ! -z "${1}" ]; do
PARAM="${PARAM} ${1}"
shift
done
fi
DAEMON_OPTS="--config=${CONFIGFILE} ${PARAM}"

# pidfile
PIDFILE="/var/run/${NAME}.pid"

test -x ${DAEMON} || exit 0

set -e

case "${ORDER}" in
start)
if [ -f ${PIDFILE} ]; then
echo "${NAME} already running: `cat ${PIDFILE}`"
exit 1
fi

echo -n "Starting ${DESC}: "
start-stop-daemon --start --quiet --pidfile /var/run/${NAME}.pid \
--chuid ${USER} --background --make-pidfile \
--exec ${DAEMON} -- ${DAEMON_OPTS}
echo "`cat ${PIDFILE}` running."
echo "${NAME}."
;;

stop)
if [ ! -f ${PIDFILE} ]; then
echo "${NAME} not running"
exit 1
fi

echo -n "Stopping ${DESC}: "

start-stop-daemon --stop --quiet --pidfile /var/run/${NAME}.pid \
--oknodo
echo "${NAME} `cat ${PIDFILE}`: stopped."
rm -f ${PIDFILE} # remove pidfile
;;

restart|force-reload)
echo -n "Restarting ${DESC}: "

start-stop-daemon --stop --quiet --pidfile /var/run/${NAME}.pid \
--oknodo

sleep 1

start-stop-daemon --start --quiet --pidfile /var/run/${NAME}.pid \
--chuid ${USER} --background --make-pidfile \
--exec ${DAEMON} -- ${DAEMON_OPTS}

echo "`cat ${PIDFILE}` restarted."
echo "${NAME}."
;;

status)
echo -n "Checking ${DESC}: "
if [ -f ${PIDFILE} ]; then
echo "`cat ${PIDFILE}` running."
else
echo "stopped."
fi
;;

*)
N=/etc/init.d/${NAME}
echo "Usage: ${NAME} {start|stop|restart|force-reload|status}" >&2
exit 1
;;
esac

exit 0

Aquest guió s'ha de desar al directori /etc/init.d/ i permet arrencar, re-arrencar, aturar i conèixer l'estat dels diferents processos del servidor OpenERP, amb els següents comandaments:

$ sudo /etc/init.d/openerp-server start
$ sudo /etc/init.d/openerp-server restart
$ sudo /etc/init.d/openerp-server stop
$ sudo /etc/init.d/openerp-server status

3.6.- Automatitzar l'arrencada del servidor OpenERP.

Per automatitzar l'arrencada del servidor OpenERP cal executar la següent ordre:

$ sudo update-rc.d openerp-server defaults 98

Els missatges del servidor no apareixen per pantalla doncs el servidor s'ha executat amb el comandament nohup, i en conseqüència, els desa a l'arxiu nohup.out de la carpeta bin del directori d'instal·lació. Per veure'ls en temps real i poder fer depuracions, executar:

$ sudo tail -f /opt/OpenERP/openerp-server-5.0.12/bin/nohup.out

A la següent entrada explicaré com instal·lar un servidor OpenERP des de cero amb l'ajuda d'un guió


Font original: http://www.aulaerp.com/