Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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
Yliur
Le Fri, 25 Nov 2016 18:40:01 +0100
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]

Il faut que tu précises la version d'Ubuntu que tu utilises. Ubuntu a
changé de gestionnaire d'amorçage (cette année je crois) et la
configuration ne sera pas la même selon le cas.
je suis en phase de dévelopement.
peut-on écrire un service qui n'a pas besoin de sudo.

Je ne sais pas.
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.

Est-ce un problème de droits (lancer un service avec des droits
modérés ; a priori en développement configurer ton pare-feu pour
interdire les connexions depuis l'extérieur serait sans doute
préférable) ou un problème pratique de configuration d'accès à
l'exécutable ?
Avatar
Une Bévue
Le 25/11/2016 à 19:55, Yliur 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]


Il faut que tu précises la version d'Ubuntu que tu utilises. Ubuntu a
changé de gestionnaire d'amorçage (cette année je crois) et la
configuration ne sera pas la même selon le cas.

Linux Mint 18 Sarah basé sur Ubuntu Xenial
si ça peut aider, pour relancer Apache2, je fais :
$ sudo service apache2 restart
je suis en phase de dévelopement.
peut-on écrire un service qui n'a pas besoin de sudo.


Je ne sais pas.

bon.
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.


Est-ce un problème de droits (lancer un service avec des droits
modérés ; a priori en développement configurer ton pare-feu pour
interdire les connexions depuis l'extérieur serait sans doute
préférable) ou un problème pratique de configuration d'accès à
l'exécutable ?

ni l'un ni l'autre. en fait mon server utilise ruby, et il y a deux ruby
sur cette bécanne, l'un "built-in" /usr/bin/ruby et l'autre installé par
mes soins en utilisant rvm (Ruby Version Manager) :
$ which ruby
/home/yt/.rvm/rubies/ruby-2.3.0/bin/ruby
comme je ne souhaite pas avoir à gérer le ruby built-in, je préfère que
mon server utilise celui d'rvm.
MAIS, env, évidemment n'a pas les mêmes PATHES quand lancé via sudo on
comme simple user.
sudo env ruby va donner /usr/bin/ruby
env ruby donnera /home/yt/.rvm/rubies/ruby-2.3.0/bin/ruby
bon, je pourrais toujours mettre un shebang en dur du genre :
#!/home/yt/.rvm/rubies/ruby-2.3.0/bin/ruby
Avatar
Philippe Weill
Le 25/11/2016 à 19:55, Yliur a écrit :
Le Fri, 25 Nov 2016 18:40:01 +0100
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]

Il faut que tu précises la version d'Ubuntu que tu utilises. Ubuntu a
changé de gestionnaire d'amorçage (cette année je crois) et la
configuration ne sera pas la même selon le cas.

Ubuntu 16.04 LTS utilise systemd
derriere la commande service il y a aussi tous les services qui sont lancés au boot
par root d'ou le sudo ( ce qui n'empeche pas les process d'etre lancés avec une autre identité )
et effectivement il existe 2 systemes :
- initd l'ancien avec la commande service )
- systemd le nouveau avec systemctl ( certaines distributions emule l'ancien systeme avec
un wrapper en shell pour service voir chkconfig)
maintenant la question est est ce que tu veux que ton service puisse demarrer au boot de la machine ou pas
pour le cas du boot en init.d
pour le demarrage tu peux faire (su - yt -c /home/yt/bin/servers/em-websocket-queue.rb)
dans ton fichier /etc/init.d/WebSocket par contre tu seras quand meme obligé de faire le sudo
pour le démarrer à la main
ensuite pour apache il existe aussi apachectl qui peux ressembler a ce que tu veux faire
c'est un script shell ( la commande service aussi d'ailleurs )
donc si tu veux juste quelque chose juste pour toi
un shell script pour faire WebSocket [start|stop|restart|status]
c'est pas très difficile
je suis en phase de dévelopement.
peut-on écrire un service qui n'a pas besoin de sudo.

Je ne sais pas.
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.

Est-ce un problème de droits (lancer un service avec des droits
modérés ; a priori en développement configurer ton pare-feu pour
interdire les connexions depuis l'extérieur serait sans doute
préférable) ou un problème pratique de configuration d'accès à
l'exécutable ?
Avatar
Doug713705
Le 26-11-2016, Une Bévue nous expliquait dans
fr.comp.os.linux.configuration
(<o1b97d$dvc$) :
Le 25/11/2016 à 19:55, Yliur 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]


Il faut que tu précises la version d'Ubuntu que tu utilises. Ubuntu a
changé de gestionnaire d'amorçage (cette année je crois) et la
configuration ne sera pas la même selon le cas.

Linux Mint 18 Sarah basé sur Ubuntu Xenial
si ça peut aider, pour relancer Apache2, je fais :
$ sudo service apache2 restart
je suis en phase de dévelopement.
peut-on écrire un service qui n'a pas besoin de sudo.


Je ne sais pas.

bon.
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.


Est-ce un problème de droits (lancer un service avec des droits
modérés ; a priori en développement configurer ton pare-feu pour
interdire les connexions depuis l'extérieur serait sans doute
préférable) ou un problème pratique de configuration d'accès à
l'exécutable ?

ni l'un ni l'autre. en fait mon server utilise ruby, et il y a deux ruby
sur cette bécanne, l'un "built-in" /usr/bin/ruby et l'autre installé par
mes soins en utilisant rvm (Ruby Version Manager) :
$ which ruby
/home/yt/.rvm/rubies/ruby-2.3.0/bin/ruby
comme je ne souhaite pas avoir à gérer le ruby built-in, je préfère que
mon server utilise celui d'rvm.
MAIS, env, évidemment n'a pas les mêmes PATHES quand lancé via sudo on
comme simple user.
sudo env ruby va donner /usr/bin/ruby
env ruby donnera /home/yt/.rvm/rubies/ruby-2.3.0/bin/ruby

Il semble que tu aies préféré installer ta version de ruby au niveau
utilisateur plutôt qu'au niveau système.
Je ne connais pas bien ruby mais j'imagine qu'il est possible
d'installer plusieurs versions au niveau système (pas dans ton
home_dir), et de les rendre toutes accessibles sans que ça se mélange
les paluches.
D'ailleurs une rapide recherche r"ruby rvm sytemwide" renvoie quelques
résultat qui vont dans ce sens.
Ce genre de mécanisme te facilitera grandement la tâche puisqu'il
suffira de définir la version de ruby par défaut poru qu'elle soit
appliquée à l'ensemble du système (Note que ce n'est peut-être pas ce
que tu veux).
bon, je pourrais toujours mettre un shebang en dur du genre :
#!/home/yt/.rvm/rubies/ruby-2.3.0/bin/ruby

Très moche et à chaque fois que tu publies un truc pareil un gentil petit
chaton se fait arracher les yeux.
--
Le ciel est bleu, le jour est J.
La bombe est H mais mon grand-père s'ennuie
Comme un chien dans un cimetière le quatorze juillet.
-- H.F. Thiéfaine, Comme un chien dans un cimetière
Avatar
Doug713705
Le 26-11-2016, Une Bévue nous expliquait dans
fr.comp.os.linux.configuration
(<o1b97d$dvc$) :
Le 25/11/2016 à 19:55, Yliur 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]


Il faut que tu précises la version d'Ubuntu que tu utilises. Ubuntu a
changé de gestionnaire d'amorçage (cette année je crois) et la
configuration ne sera pas la même selon le cas.

Linux Mint 18 Sarah basé sur Ubuntu Xenial
si ça peut aider, pour relancer Apache2, je fais :
$ sudo service apache2 restart
je suis en phase de dévelopement.
peut-on écrire un service qui n'a pas besoin de sudo.


Je ne sais pas.

bon.
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.


Est-ce un problème de droits (lancer un service avec des droits
modérés ; a priori en développement configurer ton pare-feu pour
interdire les connexions depuis l'extérieur serait sans doute
préférable) ou un problème pratique de configuration d'accès à
l'exécutable ?

ni l'un ni l'autre. en fait mon server utilise ruby, et il y a deux ruby
sur cette bécanne, l'un "built-in" /usr/bin/ruby et l'autre installé par
mes soins en utilisant rvm (Ruby Version Manager) :
$ which ruby
/home/yt/.rvm/rubies/ruby-2.3.0/bin/ruby
comme je ne souhaite pas avoir à gérer le ruby built-in, je préfère que
mon server utilise celui d'rvm.
MAIS, env, évidemment n'a pas les mêmes PATHES quand lancé via sudo on
comme simple user.
sudo env ruby va donner /usr/bin/ruby
env ruby donnera /home/yt/.rvm/rubies/ruby-2.3.0/bin/ruby

Il semble que tu aies préféré installer ta version de ruby au niveau
utilisateur plutôt qu'au niveau système.
Je ne connais pas bien ruby mais j'imagine qu'il est possible
d'installer plusieurs versions au niveau système (pas dans ton
home_dir), et de les rendre toutes accessibles sans que ça se mélange
les paluches.
D'ailleurs une rapide recherche "ruby rvm sytemwide" renvoie quelques
résultats qui vont dans ce sens.
Ce genre de mécanisme te facilitera grandement la tâche puisqu'il
suffira de définir la version de ruby par défaut poru qu'elle soit
appliquée à l'ensemble du système (Note que ce n'est peut-être pas ce
que tu veux).
bon, je pourrais toujours mettre un shebang en dur du genre :
#!/home/yt/.rvm/rubies/ruby-2.3.0/bin/ruby

Très moche et à chaque fois que tu publies un truc pareil un gentil petit
chaton se fait arracher les yeux.
--
Le ciel est bleu, le jour est J.
La bombe est H mais mon grand-père s'ennuie
Comme un chien dans un cimetière le quatorze juillet.
-- H.F. Thiéfaine, Comme un chien dans un cimetière
Avatar
Une Bévue
Le 26/11/2016 à 07:43, Philippe Weill a écrit :
- systemd le nouveau avec systemctl ( certaines distributions emule
l'ancien systeme avec
un wrapper en shell pour service voir chkconfig)

ça doit être mon cas :
┬─[:~/Brunch/Essai]─[16-11-26 08:05:01]
╰─>$ cat /usr/sbin/service
#!/bin/sh
###########################################################################
# /usr/bin/service
#
# A convenient wrapper for the /etc/init.d init scripts.
#
# This script is a modified version of the /sbin/service utility found on
# Red Hat/Fedora systems (licensed GPLv2+).
#
qui se termine par :
update_openrc_started_symlinks
run_via_sysvinit
De plus dans ma distrib il y a un "skeleton" :
┬─[:~/Brunch/Essai]─[16-11-26 08:12:23]
╰─>$ cat /etc/init.d/skeleton
#!/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: Foo Bar
#
# Please remove the "Author" lines above and replace them
# with your own name if you copy and modify this script.
DESC="Description of the service"
DAEMON=/usr/sbin/daemonexecutablename
ce qui me semble être ce que je cherchais non ?
ça ça serait mon "/etc/init.d/WebSocket"
et pour lancer sous user 'yt' le daemon je placerait un script sh dans
/usr/sbin qui lui lancerait mon script ruby
"/home/yt/bin/servers/em-websocket-queue.rb".
je n'ai pas lu /usr/sbin/service mais j'imagine que le but est de forker
le DAEMON, récupérer son pid pour pouvoir le killer non ?
le status, par contre je ne sais pas ce qu'il retourne.
pour Apache2 :
┬─[:~/Brunch/Essai]─[16-11-26 08:13:06]
╰─>$ sudo service apache2 status
[sudo] Mot de passe de yt :
● apache2.service - LSB: Apache2 web server
Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since ven. 2016-11-25 10:43:58 CET; 21h ago
Docs: man:systemd-sysv-generator(8)
Process: 7163 ExecReload=/etc/init.d/apache2 reload (code=exited,
status=0/SUCCESS)
Process: 1393 ExecStart=/etc/init.d/apache2 start (code=exited,
status=0/SUCCESS)
...
Avatar
Une Bévue
Le 26/11/2016 à 07:43, Philippe Weill a écrit :
et effectivement il existe 2 systemes :
- initd l'ancien avec la commande service )
- systemd le nouveau avec systemctl ( certaines distributions emule
l'ancien systeme avec
un wrapper en shell pour service voir chkconfig)
maintenant la question est est ce que tu veux que ton service puisse
demarrer au boot de la machine ou pas
pour le cas du boot en init.d
pour le demarrage tu peux faire (su - yt -c
/home/yt/bin/servers/em-websocket-queue.rb)
dans ton fichier /etc/init.d/WebSocket par contre tu seras quand meme
obligé de faire le sudo
pour le démarrer à la main
ensuite pour apache il existe aussi apachectl qui peux ressembler a ce
que tu veux faire
c'est un script shell ( la commande service aussi d'ailleurs )
donc si tu veux juste quelque chose juste pour toi
un shell script pour faire WebSocket [start|stop|restart|status]
c'est pas très difficile

OK, merci beaucoup, effectivement je veux juste un script genre :
WebSocket [start|stop|restart|status]
je sais que c'est pas difficile.
effectivement je pensais dans ce script passer de root à yt par su
oui je veux un truc qui démarre au boot
Avatar
Une Bévue
Le 26/11/2016 à 08:07, Doug713705 a écrit :
Il semble que tu aies préféré installer ta version de ruby au niveau
utilisateur plutôt qu'au niveau système.
Je ne connais pas bien ruby mais j'imagine qu'il est possible
d'installer plusieurs versions au niveau système (pas dans ton
home_dir), et de les rendre toutes accessibles sans que ça se mélange
les paluches.
D'ailleurs une rapide recherche "ruby rvm sytemwide" renvoie quelques
résultats qui vont dans ce sens.

ben ce n'est pas conseillé :
Multi-User installations - For server administrators - For an
installation usable by all users on the system - Please note that
Single-User supersedes Multi-User. This also used to be called the
System-Wide Install. Using this type of installation without knowledge
how umask works is a big security risk.
là-dessus j'ai l'habitude de macSO qui a aussi son "system wide" ruby et
j'ai toujours évité d'y toucher, d'y ajouter même un seul gem.
sur ubuntu xenial déjà la gestion de gems me semble bizarre.
je ne voudrais pas abimer le ruby "buil-in"
Ce genre de mécanisme te facilitera grandement la tâche puisqu'il
suffira de définir la version de ruby par défaut poru qu'elle soit
appliquée à l'ensemble du système (Note que ce n'est peut-être pas ce
que tu veux).
bon, je pourrais toujours mettre un shebang en dur du genre :
#!/home/yt/.rvm/rubies/ruby-2.3.0/bin/ruby

Très moche et à chaque fois que tu publies un truc pareil un gentil petit
chaton se fait arracher les yeux.

oui, ben là, je sais bien...
Avatar
Jo Engo
Le Sat, 26 Nov 2016 08:29:42 +0100, Une Bévue a écrit :
╰─>$ sudo service apache2 status

Le sudo est inutile ici.
--
L'avenir, il ne s'agit pas de le prévoir, mais de le rendre possible.
-+- Antoine de Saint-Exupéry (1900-1944) -+-
Avatar
Philippe Weill
Le 26/11/2016 à 09:58, Jo Engo a écrit :
Le Sat, 26 Nov 2016 08:29:42 +0100, Une Bévue a écrit :
╰─>$ sudo service apache2 status

Le sudo est inutile ici.

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