{{tag>Bash Script Service}}
= Script initV
FIXME : Doublon avec [[script_init_wrapper]]
Aujourd'hui au boulot : install d'un logiciel privateur sur une Debian.
Cette solution install un script dans /etc/init.d/ Je vais l'appeler ici **MACHINAgent**
J'ai donc mon beau script /etc/init.d/MACHINAgent
Le pb c'est qu'il démarre le processus avec les privilèges root
Une solution serait d'utiliser crontab sous un compte utilisateur.
@reboot /etc/init.d/MACHINAgent start
Je crée un utilisateur système. Mais la crontab, ce n'est pas une bonne idée :
* Il ne ferme pas l'appli correctement
* Logiquement tous les scripts /etc/init.d/ doivent pouvoir être lancer en root et lancer les process avec un compte dedié.
Lancement du serveur MACHIN sous un compte utilisateur (non-root) sous Debian.
== 1) Création d’un nouvel utilisateur dédie au serveur MACHIN.
Dans notre exemple il s’agit de « machin »
== 2) Création du script
''/etc/init.d/MACHINWrapper''
#! /bin/bash
# chkconfig: 35 85 15
# description: Startup script for MACHIN Agent Wrapper
### BEGIN INIT INFO
# Provides: MACHINWrapper
# Required-Start: $network $local_fs $remote_fs $time $syslog
# Required-Stop: $network $local_fs $remote_fs $time $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Wrapper pour lancer les scripts sysVinit avec un compte utilisateur (non root)
# Description: Wrapper pour lancer les scripts sysVinit avec un compte utilisateur (non root)
### END INIT INFO
MACHIN_USER=machin
MACHIN_INITSCRIPT=/etc/init.d/MACHINAgent
su - $MACHIN_USER -c "$MACHIN_INITSCRIPT $*"
=== Explications
Les commentaires servent !
* Ligne 1 : c'est le [[https://fr.wikipedia.org/wiki/Shebang|Shebang]]
* Ligne 2 : **chkconfig** sert pour Redhat/CentOS
* Ligne 3 : **description** sert aussi pour chkconfig !?
* Ligne 4 à 12 : C'est la même chose que chkconfig, mais pour la plupart des distros. C'est une norme [[https://fr.wikipedia.org/wiki/Linux_Standard_Base|LSB]] Voir [[https://wiki.debian.org/LSBInitScripts]]
* Ligne 13 à FIN : C'est le code.
* Ligne 13 : Variable **MACHIN_USER** qui contient le nom du compte dédié au service.
* Ligne 14 : Variable **MACHIN_INITSCRIPT** qui contient le chemin complet de l'ancien script que nous avons déplacé
* Ligne 15 FIN: On utilise la commande **su** pour changer de compte. Puis $* représente tous les arguments. Dans le cas d'un script init : start, stop, status, restart et éventuellement d'autres.
Voir [[http://www.vincentliefooghe.net/content/chkconfig-activer-les-services-au-d%C3%A9marrage-sous-redhat-centos]]
Note : Les commentaires du scripts sont nécessaire. Voir [[https://wiki.debian.org/LSBInitScripts]] [[http://linux.die.net/man/8/chkconfig]]
== 3) Gestion des services
Placer les droits d’exec :
chmod +x /etc/init.d/MACHINWrapper
Désactivation du démarrage de l’ancien script.
update-rc.d MACHINAgent remove
Activation du nouveau script
update-rc.d MACHINWrapper defaults
On vérifie :
find /etc/rc* -iname "*MACHIN*"
== 4) Fin
Arrêt process lancé en root
/etc/init.d/MACHINAgent stop
Ici l’utilisateur **machin** devient le nouveau propriétaires des fichiers
chown machin: /opt/machin/ -R
On démarre MACHINWrapper
/etc/init.d/MACHINWrapper start
== En cas de Pb :
Refaire point 3 et 4.
Idem si application patch.
== Notes
NB : il convient dans la supervision de s’assurer que le process tourne sous le bon compte.
Exemple :
pgrep -u machin nomDuProcess && echo OK || echo NOK