OVH Cloud OVH Cloud

Ubuntu ajouter une service

29 réponses
Avatar
Une Bévue
J'ai un script ruby qui est un serveur de websocket.
J'aimerais pouvoir le lancer par des commandes analogues à Apache 2 du
genre :

service WebSocket [start|stop|restart]

je suis en phase de dévelopement.

peut-on écrire un service qui n'a pas besoin de sudo.

mon script se lance actuellement par :
/home/yt/bin/servers/em-websocket-queue.rb

je préfère le lancer en tant qu'user (plutôt que root) parce que ce
script utilise le ruby/rvm installé dans mon home.

10 réponses

1 2 3
Avatar
Jo Engo
Le Sat, 26 Nov 2016 10:07:18 +0100, Philippe Weill a écrit :
Le sudo est inutile ici.

t'es sûr
[ ~]$ service httpd status httpd status unknown due to
insufficient privileges.

au temps pour moi.
--
On peut aimer l'amour et mépriser l'amant.
-+- Georges Farquhar (1677-1707) -+-
Avatar
Une Bévue
Le 25/11/2016 à 18:40, Une Bévue a écrit :
J'ai un script ruby qui est un serveur de websocket.
J'aimerais pouvoir le lancer par des commandes analogues à Apache 2 du
genre :
service WebSocket [start|stop|restart]
je suis en phase de dévelopement.
peut-on écrire un service qui n'a pas besoin de sudo.
mon script se lance actuellement par :
/home/yt/bin/servers/em-websocket-queue.rb
je préfère le lancer en tant qu'user (plutôt que root) parce que ce
script utilise le ruby/rvm installé dans mon home.

Bon, j'ai progressé sur le sujet en créant un fichier :
/etc/init/websocket.conf
et
/etc/init.d/websocket
(je n'ai pas su créer un "websocket.service", je ne vois pas où trouver
un exemple...)
là ça roule avec des warnings :
┬─[:~]─[16-11-27 11:03:31]
╰─>$ sudo /etc/init.d/websocket start
[sudo] Mot de passe de yt :
* Starting WebSocket Server to access MongoDB databases.
em-websocket-queue.rb
start-stop-daemon: warning: this system is
not able to track process names
longer than 15 characters, please use --exec instead of --name.
start-stop-daemon: warning: this system is not able to track process names
longer than 15 characters, please use --exec instead of --name.
[2016-11-27 11:21:54 +0100]: WebSocket connection open, listening at
ws://0.0.0.0:8088.
[2016-11-27 11:21:54 +0100]: Recieved message with data:
{
"database": "Geolocalisation",
"collection": "departements",
"$id": "1480242114725~1"
}
[2016-11-27 11:21:54 +0100]: data['database'] = Geolocalisation
[2016-11-27 11:21:54 +0100]: data['collection'] = departements
[2016-11-27 11:21:54 +0100]: Sending response.
je liste mon websocket.conf car, en ce qui concerne les run levels, ça
doit pas être ça...
(j'ai copié sur ntp.conf)
je note d'ailleurs que le mongodb.conf a :
start on runlevel [2345]
stop on runlevel [!2345]
et comme mon websocket se connecte à MongoDB, j'imagine que
start on runlevel [2345] doit venir après !
par exemple start on runlevel [2346] ???
par contre pour le stop je dois couper avant :
stop on runlevel [!2346] ???
bon le listing de ce fichier :
┬─[:~]─[16-11-27 10:31:26]
╰─>$ cat /etc/init/websocket.conf
# websocket - websocket job file
description "WebSocket Server to access MongoDB databases."
author "Une Bévue "
# Stanzas
#
# Stanzas control when and how a process is started and stopped
# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn
# When to start the service
start on runlevel [2345]
# When to stop the service
stop on runlevel [016]
# Automatically restart process if crashed
# respawn
# Essentially lets upstart know the process will detach itself to the
background
expect fork
# Run before process
#pre-start script
# [ -d /var/run/myservice ] || mkdir -p /var/run/myservice
# echo "Put bash code here"
#end script
# Start the process
exec websocket
┬─[:~]─[16-11-27 11:30:39]
╰─>$
et le fichier websocket :
┬─[:~]─[16-11-27 11:30:39]
╰─>$ cat /etc/init.d/websocket
#!/bin/sh
# kFreeBSD do not accept scripts as interpreters, using #!/bin/sh and
sourcing.
if [ true != "$INIT_D_SCRIPT_SOURCED" ] ; then
set "$0" "$@"; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script
fi
### BEGIN INIT INFO
# Provides: skeleton
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Example initscript
# Description: This file should be used to construct scripts to be
# placed in /etc/init.d. This example start a
# single forking daemon capable of writing a pid
# file. To get other behavoirs, implemend
# do_start(), do_stop() or other functions to
# override the defaults in /lib/init/init-d-script.
### END INIT INFO
# Author: Une Bévue
#
# Please remove the "Author" lines above and replace them
# with your own name if you copy and modify this script.
DESC="WebSocket Server to access MongoDB databases."
DAEMON=/home/yt/bin/servers/em-websocket-queue.rb
Avatar
Philippe Weill
Le 27/11/2016 à 11:35, Une Bévue a écrit :
Bon, j'ai progressé sur le sujet en créant un fichier :
/etc/init/websocket.conf
et
/etc/init.d/websocket
(je n'ai pas su créer un "websocket.service", je ne vois pas où trouver un exemple...)

je ne connais pas du tout les debian like récente
mais si je fais le // avec les redhat like
ce que tu cherche devrait se trouver dans /etc/systemd
+ doc de systemd
exemple :
cat /etc/systemd/system/multi-user.target.wants/sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service
[Service]
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSecBs
[Install]
WantedBy=multi-user.target
là ça roule avec des warnings :
┬─[:~]─[16-11-27 11:03:31]
╰─>$ sudo /etc/init.d/websocket start
[sudo] Mot de passe de yt :
* Starting WebSocket Server to access MongoDB databases. em-websocket-queue.rb start-stop-daemon:
warning: this system is not able to track process names
longer than 15 characters, please use --exec instead of --name.
start-stop-daemon: warning: this system is not able to track process names
longer than 15 characters, please use --exec instead of --name.
[2016-11-27 11:21:54 +0100]: WebSocket connection open, listening at ws://0.0.0.0:8088.
[2016-11-27 11:21:54 +0100]: Recieved message with data:
{
"database": "Geolocalisation",
"collection": "departements",
"$id": "1480242114725~1"
}
[2016-11-27 11:21:54 +0100]: data['database'] = Geolocalisation
[2016-11-27 11:21:54 +0100]: data['collection'] = departements
[2016-11-27 11:21:54 +0100]: Sending response.
je liste mon websocket.conf car, en ce qui concerne les run levels, ça doit pas être ça...
(j'ai copié sur ntp.conf)
je note d'ailleurs que le mongodb.conf a :
start on runlevel [2345]
stop on runlevel [!2345]
et comme mon websocket se connecte à MongoDB, j'imagine que
start on runlevel [2345] doit venir après !
par exemple start on runlevel [2346] ???
par contre pour le stop je dois couper avant :
stop on runlevel [!2346] ???
bon le listing de ce fichier :
┬─[:~]─[16-11-27 10:31:26]
╰─>$ cat /etc/init/websocket.conf
# websocket - websocket job file
description "WebSocket Server to access MongoDB databases."
author "Une Bévue "
# Stanzas
#
# Stanzas control when and how a process is started and stopped
# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn
# When to start the service
start on runlevel [2345]
# When to stop the service
stop on runlevel [016]
# Automatically restart process if crashed
# respawn
# Essentially lets upstart know the process will detach itself to the background
expect fork
# Run before process
#pre-start script
# [ -d /var/run/myservice ] || mkdir -p /var/run/myservice
# echo "Put bash code here"
#end script
# Start the process
exec websocket
┬─[:~]─[16-11-27 11:30:39]
╰─>$
et le fichier websocket :
┬─[:~]─[16-11-27 11:30:39]
╰─>$ cat /etc/init.d/websocket
#!/bin/sh
# kFreeBSD do not accept scripts as interpreters, using #!/bin/sh and sourcing.
if [ true != "$INIT_D_SCRIPT_SOURCED" ] ; then
set "$0" "$@"; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script
fi
### BEGIN INIT INFO
# Provides: skeleton
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Example initscript
# Description: This file should be used to construct scripts to be
# placed in /etc/init.d. This example start a
# single forking daemon capable of writing a pid
# file. To get other behavoirs, implemend
# do_start(), do_stop() or other functions to
# override the defaults in /lib/init/init-d-script.
### END INIT INFO
# Author: Une Bévue
#
# Please remove the "Author" lines above and replace them
# with your own name if you copy and modify this script.
DESC="WebSocket Server to access MongoDB databases."
DAEMON=/home/yt/bin/servers/em-websocket-queue.rb
Avatar
Une Bévue
Le 27/11/2016 à 12:03, Philippe Weill a écrit :
Le 27/11/2016 à 11:35, Une Bévue a écrit :
Bon, j'ai progressé sur le sujet en créant un fichier :
/etc/init/websocket.conf
et
/etc/init.d/websocket
(je n'ai pas su créer un "websocket.service", je ne vois pas où
trouver un exemple...)

je ne connais pas du tout les debian like récente
mais si je fais le // avec les redhat like
ce que tu cherche devrait se trouver dans /etc/systemd
+ doc de systemd
exemple :
cat /etc/systemd/system/multi-user.target.wants/sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service
[Service]
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSecBs
[Install]
WantedBy=multi-user.target

OK, merci beaucoup : ça va m'aider.
Avatar
Une Bévue
Le 27/11/2016 à 12:03, Philippe Weill a écrit :
exemple :
cat /etc/systemd/system/multi-user.target.wants/sshd.service

j'ai exactement le même répertoire.
je vais donc pouvoir m'inspirer d'un service.
Avatar
Une Bévue
Le 25/11/2016 à 18:40, Une Bévue a écrit :
J'ai un script ruby qui est un serveur de websocket.
J'aimerais pouvoir le lancer par des commandes analogues à Apache 2 du
genre :
service WebSocket [start|stop|restart]
je suis en phase de dévelopement.
peut-on écrire un service qui n'a pas besoin de sudo.
mon script se lance actuellement par :
/home/yt/bin/servers/em-websocket-queue.rb
je préfère le lancer en tant qu'user (plutôt que root) parce que ce
script utilise le ruby/rvm installé dans mon home.

Bon j'ai suivi le tuto :
tutoriel:comment_transformer_un_programme_en_service
<https://doc.ubuntu-fr.org/tutoriel/comment_transformer_un_programme_en_service>
et mon DAEMON roule après restart, seul hic :
à la commande :
$ sudo update-rc.d websocket defaults
j'ai eu droit à :
insserv: warning: script 'websocket' missing LSB tags and overrides
Avatar
Nicolas George
Une Bévue , dans le message <o1h02v$sr3$, a
écrit :
Bon j'ai suivi le tuto :
tutoriel:comment_transformer_un_programme_en_service
<https://doc.ubuntu-fr.org/tutoriel/comment_transformer_un_programme_en_service>

« Selon les tags présents sur cette page, les informations qu'elle
contient n'ont pas été vérifiées depuis Ubuntu 12.04 LTS. »
Tu as tenu compte de ça ?
Avatar
Sergio
Le 28/11/2016 à 11:55, Nicolas George a écrit :
Une Bévue , dans le message <o1h02v$sr3$, a
écrit :
Bon j'ai suivi le tuto :
tutoriel:comment_transformer_un_programme_en_service
<https://doc.ubuntu-fr.org/tutoriel/comment_transformer_un_programme_en_service>

« Selon les tags présents sur cette page, les informations qu'elle
contient n'ont pas été vérifiées depuis Ubuntu 12.04 LTS. »
Tu as tenu compte de ça ?

...Et avec systemd, il faut tout reprendre à zéro...
--
Serge http://leserged.online.fr/
Mon blog: http://cahierdesergio.free.fr/
Soutenez le libre: http://www.framasoft.org
Avatar
Sergio
Le 28/11/2016 à 12:05, Sergio a écrit :
Le 28/11/2016 à 11:55, Nicolas George a écrit :
Une Bévue , dans le message <o1h02v$sr3$, a
écrit :
Bon j'ai suivi le tuto :
tutoriel:comment_transformer_un_programme_en_service
<https://doc.ubuntu-fr.org/tutoriel/comment_transformer_un_programme_en_service>

« Selon les tags présents sur cette page, les informations qu'elle
contient n'ont pas été vérifiées depuis Ubuntu 12.04 LTS. »
Tu as tenu compte de ça ?

...Et avec systemd, il faut tout reprendre à zéro...

Peut-être là : https://doc.ubuntu-fr.org/creer_un_service_avec_systemd
(pas testé)
--
Serge http://leserged.online.fr/
Mon blog: http://cahierdesergio.free.fr/
Soutenez le libre: http://www.framasoft.org
Avatar
Une Bévue
Le 28/11/2016 à 12:05, Sergio a écrit :
« Selon les tags présents sur cette page, les informations qu'elle
contient n'ont pas été vérifiées depuis Ubuntu 12.04 LTS. »
Tu as tenu compte de ça ?


non, j'ai lu plusieurs tuto qui ne disent pas les mêmes choses.
bon, je regarderai de + près en fonction de ma release d'Ubuntu
...Et avec systemd, il faut tout reprendre à zéro...

bon, mais j'ai déjà un encouragement vu que "ça marche"...
1 2 3