# [Runscript] Mise au point (Résolu)

## jaypeche

Bonjour à tous,

Je cherche à créer un fichier runscript pour démarrer un service nommé "Openplacos", qui est en fait un serveur capable de gérer des cartes Arduino, Phidgets et autres.. Ceçi afin de réaliser un petit automate pour pas cher, ce logiciel est écrit en RUBY.

Le fichier d'origine et fonctionnel est le suivant :

Fichier original : /etc/init.d/openplacos

```
#!/bin/bash

case "$1" in

        start)

                echo "Starting OpenplacOS"

                export RUBYOPT="rubygems"

                su -l openplacos -s /bin/sh -c "/usr/bin/openplacos-server /etc/default/openplacos > /tmp/openplacos.log &"

    if [ $? -gt 0 ]; then

                    exit 1

                else

                    exit 0

                fi

        ;;

        stop)

                echo "Stopping OpenplacOS"

                pkill openplacos -u openplacos

                if [ $? -gt 0 ]; then

                    exit 1

                else

                    exit 0

                fi

    

        ;;

        restart)

                $0 stop

                sleep 1

                $0 start

        ;;

        *)

                echo "usage: $0 {start|stop|restart}"

esac

exit 0

```

Je souhaiterais me tourner vers un fichier runscript disons plus standard, pour une meilleure intégration Gentoo :

Fichier runscript à dévelloper : /etc/init.d/openplacos

```
#!/sbin/runscript

# Copyright 1999-2011 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: $

USER=openplacos

CONFIG=/etc/conf.d/openplacos

LOGFILE=/tmp/openplacos.log

DAEMON=/usr/bin/openplacos-server

depend() {

        need dbus mysql

        after logger

}

start() {

        ebegin "Starting openplacos"

        start-stop-daemon --start --quiet \

        --user ${USER}:${USER} \

        --exec ${DAEMON} \

        --background \

        eend $? "Failed to start openplacos !"

}

#stop() {

#        ebegin "Stopping openplacos"

#        start-stop-daemon --stop --quiet \

#       --exec /usr/bin/openplacos-server

#        eend $? "Failed to stop openplacos !"

#}

```

Je me suis penché sur la documentation : http://www.gentoo.org/doc/fr/handbook/handbook-x86.xml?part=2&chap=4 , mais je n'arrive pas à lancer le serveur avec mon script. J'ai cette erreur :

```
dbox2 init.d # /etc/init.d/openplacos start

/etc/init.d/../conf.d/openplacos: line 1: objects: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 3: - : commande introuvable

/etc/init.d/../conf.d/openplacos: line 4: path: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 5: model: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 6: regul: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 7: action-: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 8: frequency: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 9: type: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 11: - : commande introuvable

/etc/init.d/../conf.d/openplacos: line 12: path: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 13: model: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 15: - : commande introuvable

/etc/init.d/../conf.d/openplacos: line 16: path: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 17: model: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 18: depends: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 19: temp: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 21: - : commande introuvable

/etc/init.d/../conf.d/openplacos: line 22: path: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 23: model: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 24: depends: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 25: temp: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 26: regul: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 27: action-: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 28: frequency: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 29: plugin_fill_sql_frequency: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 32: - : commande introuvable

/etc/init.d/../conf.d/openplacos: line 33: path: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 34: model: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 36: - : commande introuvable

/etc/init.d/../conf.d/openplacos: line 37: path: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 38: model: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 41: card: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 42: - : commande introuvable

/etc/init.d/../conf.d/openplacos: line 43: exec: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 44: config: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 45: timeout: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 46: plug: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 47: /Pin_1:: Aucun fichier ou dossier de ce type

/etc/init.d/../conf.d/openplacos: line 48: /Pin_2:: Aucun fichier ou dossier de ce type

/etc/init.d/../conf.d/openplacos: line 49: /Pin_3:: Aucun fichier ou dossier de ce type

/etc/init.d/../conf.d/openplacos: line 50: /Pin_4:: Aucun fichier ou dossier de ce type

/etc/init.d/../conf.d/openplacos: line 51: /Pin_5:: Aucun fichier ou dossier de ce type

/etc/init.d/../conf.d/openplacos: line 52: /Pin_6:: Aucun fichier ou dossier de ce type

/etc/init.d/../conf.d/openplacos: line 55: plugins: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 57: - : commande introuvable

/etc/init.d/../conf.d/openplacos: line 58: method: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 59: exec: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 61: - : commande introuvable

/etc/init.d/../conf.d/openplacos: line 62: method: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 63: exec: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 65: - : commande introuvable

/etc/init.d/../conf.d/openplacos: line 66: method: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 67: exec: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 69: - : commande introuvable

/etc/init.d/../conf.d/openplacos: line 70: method: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 71: exec: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 72: file: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 74: - : commande introuvable

/etc/init.d/../conf.d/openplacos: line 75: method: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 76: exec: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 77: port: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 79: - : commande introuvable

/etc/init.d/../conf.d/openplacos: line 80: method: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 81: exec: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 82: port: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 84: user: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 87: - : commande introuvable

/etc/init.d/../conf.d/openplacos: line 88: permissions: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 89: read: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 92: - : commande introuvable

/etc/init.d/../conf.d/openplacos: line 93: hash: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 94: permissions: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 95: read: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 96: write: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 97: exclude: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 100: - : commande introuvable

/etc/init.d/../conf.d/openplacos: line 101: hash: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 102: permissions: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 103: read: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 106: - : commande introuvable

/etc/init.d/../conf.d/openplacos: line 107: hash: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 108: permissions: : commande introuvable

/etc/init.d/../conf.d/openplacos: line 109: write: : commande introuvable

 * openplacos: error loading /etc/init.d/../conf.d/openplacos

 * ERROR: openplacos failed to start
```

Malgré mes recherches, je ne sais pas trop comment faire pour solutionner ce problème, il me semble et je peux me tromper que cela est du au fait que le serveur est un script RUBY, voiçi le code :

http://pastebin.com/zWuHyYrd

comment coder mon script pour réaliser la meme chose que le fichier original ? 

 :Idea:  Si quelqu'un peux m'apporter des précisions sur la manière de faire, ce serait vraiment sympa... Google ne m'aide pas bcp !! 

Merçi

----------

## Leander256

Salut,

je pense que tu fais une confusion entre fichier de configuration pour le lancement du service et fichier de configuration du script lui-même. Il faudrait que tu nous montre le contenu de /etc/conf.d/openplacos mais je parie que tu as mis le fichier que openplacos lit pour démarrer.

Les fichiers placés dans /etc/conf.d/ servent à gérer les options des services. Typiquement ils permettent de passer des paramètres en ligne de commande lors du lancement d'un service. Il faut donc qu'ils respectent une syntaxe précise et surtout ils n'ont rien à voir avec le(s) fichier(s) de configuration que le service lui-même va utiliser.

Donc tu as deux solutions:

la plus simple consiste à déplacer ton /etc/conf.d/openplacos vers /etc/default/openplacos (je vois que c'est le fichier de conf lu par défaut par openplacos) et de laisser /etc/conf.d/openplacos vide

la plus compliquée consiste à déplacer ton /etc/conf.d/openplacos vers /etc/openplacos.conf (par exemple), de rajouter une ligne dans ton /etc/init.d/openplacos (NB: le -- est isolé, ce n'est pas une faute de frappe):

```
start-stop-daemon --start --quiet \

        --user ${USER}:${USER} \

        --exec ${DAEMON} \

        --background \

        -- $OPENPLACOS_OPTS
```

 et de créer un /etc/conf.d/openplacos qui contient:

```
OPENPLACOS_OPTS="--file /etc/openplacos.conf"
```

Après tu vas sûrement avoir un autre problème à cause d'un RUBYOPT non initialisé, mais là de suite je ne sais pas comment faire.

----------

## jaypeche

Salut Leander256,

 *Quote:*   

> je pense que tu fais une confusion entre fichier de configuration pour le lancement du service et fichier de configuration du script lui-même. Il faudrait que tu nous montre le contenu de /etc/conf.d/openplacos mais je parie que tu as mis le fichier que openplacos lit pour démarrer.
> 
> Les fichiers placés dans /etc/conf.d/ servent à gérer les options des services. Typiquement ils permettent de passer des paramètres en ligne de commande lors du lancement d'un service. Il faut donc qu'ils respectent une syntaxe précise et surtout ils n'ont rien à voir avec le(s) fichier(s) de configuration que le service lui-même va utiliser.
> 
> 

 

Tout à fait, je n'avais pas reflechi à cela, j'ai donc suivi tes recommandations et supprimer /etc/conf.d/openplacos qui n'était du fait pas utile..

J'ai ensuite modifier le runscript pour exporter la variable RUBYOPT, ça à l'air de tourner comme ça?§!

Fichier /etc/init.d/openplacos :

```
#!/sbin/runscript

# Copyright 1999-2011 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: $

DESCRIPTION="This utility is used to create a low cost home automation system controlled by computer"

HOMEPAGE="http://openplacos.tuxfamily.org"

SVCNAME="openplacos-server"

USER=openplacos

DAEMON=$(which ${SVCNAME})

PIDFILE=/var/run/openplacos.pid

CONFIGFILE=/etc/default/openplacos

LOGFILE=/tmp/openplacos.log

depend() {

        need dbus mysql

        after logger

}

checkconfig() {

        if [ ! -r ${CONFIGFILE} ]; then

                eerror "ERROR: Unable to read configuration file: ${CONFIGFILE}"

                return 1

        fi

}

checkprocess() {

        if [ $(ps ax | grep ${SVCNAME} | grep -v grep | wc -l) -eq 0 ]; then

                eerror "ERROR: Please, check logfile: ${LOGFILE}"

                return 1

        fi

}

start() {

        checkconfig || return $?

        ebegin "Starting openplacos"

        export RUBYOPT="rubygems"

        start-stop-daemon --start --user ${USER} --exec ${DAEMON} \

        --pidfile ${PIDFILE} --make-pidfile --background --stdout ${LOGFILE}

        sleep 3

        checkprocess || return $?

        eend $? "Failed to start openplacos !"

}

stop() {

        ebegin "Stopping openplacos"

        start-stop-daemon --stop --quiet --user ${USER} --exec ${DAEMON} --pidfile ${PIDFILE}

        eend $? "Failed to stop openplacos !"

}
```

```
dbox2 openplacos # /etc/init.d/openplacos status

 * status: started

dbox2 openplacos # /etc/init.d/openplacos stop

 * Caching service dependencies ...                                                                                                   [ ok ]

 * Stopping openplacos ...                                                                                                            [ ok ]

dbox2 openplacos # /etc/init.d/openplacos start

 * Starting openplacos ...                                                                                                            [ ok ]

dbox2 openplacos # /etc/init.d/openplacos restart

 * Stopping openplacos ...                                                                                                            [ ok ]

 * Starting openplacos ...                                                                                                            [ ok ]

dbox2 openplacos # 
```

Merçi pour ton aide précieuse ! (Résolu)

----------

