Problème lors d'un lancement de script au démarrage

Bonjour à tous,

J’essaye en vain de mettre en place un script au démarrage d’un serveur.
Voici mon script dans init.d :

#!/bin/sh

### BEGIN INIT INFO
# Provides: pm2_produit
# Required-Start: $all $syslog
# Required-Stop: $all $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.
#
### END INIT INFO


    # Placez ici des commandes à exécuter à chaque appel du script
    echo 'Le script a été appelé !' >> /root/pm2_produit.txt

    # Le switch case ci-dessous permet de savoir si le système souhaite lancer ou arrêter le script (on le lance au démarrage et l'arrête à la fermeture du système)
    case "$1" in
        start)
            # Placez ici les commandes à exécuter uniquement au lancement du script
            pm2 start /var/sfprojects/produit/nodejs/index.js --name produit_controleur --watch
            echo 'Le script a été lançé !' >> /root/pm2_produit.txt
        ;;

        stop)
            # Placez ici les commandes à exécuter uniquement à l'arrêt du script
            #echo 'Le script a été arrêté !' >> /root/pm2_produit.txt
        ;;

        *)
            # On indique ici comment utiliser le script, c'est dans le cas où le script est appelé sans argument ou avec un argument invalide
            echo 'Usage: /etc/init.d/pm2_produit {start|stop}'
            exit 1
        ;;
    esac

    exit 0

Malheureusement celui ci ne se lance pas.
J’arrive à le lancer sans problème avec la commande /etc/init.d/pm2_produit start

Si quelqu’un à une idée je suis preneur :wink:

As-tu activé le script avec [mono]update-rc.d[/mono] ?

PS : utilise les balises de code pour la mise en forme au lieu du gras.

oui j’ai exécuté la commande suivante :

update-rc.d pm2_isale defaults

Après j’ai le warning suivant:
update-rc.d: using dependency based boot sequencing

ton script s’appelle pm2_produit ou pm2_isale ?
par ailleurs la déclaration Provides n’est pas en accord, il faut mettre le nom du script (et pas firewall comme actuellement).

ton script s’appelle pm2_produit ou pm2_isale ?
par ailleurs la déclaration Provides n’est pas en accord, il faut mettre le nom du script (et pas firewall comme actuellement).[/quote]

mon script s’appelle pm2_produit je me suis trompé dans mon message.
Et oui j’ai modifier le nom Provides avec le nom de mon script.

Mais tout cela n’a rien changé, il ne se lance toujours pas au démarrage.

J’ai l’impression que lors du lancement du script il ne connait pas commande pm2 car j’ai bien l’insertion dans mon fichier texte.

J’ai essayé de mettre /usr/local/bin/pm2 mais rien :smiling_imp: :smiling_imp:

Comment dois je paramétrer mon script pour qu’il s’exécute en fin de chargement de mon serveur ?

Regarde dans les répertoires /etc/rc{2,3,4,5}.d/.
S’ils contiennent un lien symbolique Sxxpm2_produit avec le numéro xx le plus élevé, alors le script s’exécute bien en dernier.

Apparemment il se lance en premier : S01…

Comme puis je faire pour le mettre en dernier ?
Peut on modifier son nom avec 99 par exemple ou c’est plus compliqué que cela ?

Tu peux mais cela risque de perturber la gestion des scripts d’init par la suite.

C’est étonnant, [mono]# Required-Start: $all[/mono] devrait placer le script vers la fin ($syslog n’est pas utile puisqu’il y a déjà $all). Je viens de le vérifier.

Que donne

grep pm2 /etc/init.d/.depend.start?

Voici le résultat de la commande grep pm2 /etc/init.d/.depend.start :

TARGETS = vmware-tools killprocs portmap nfs-common rsyslog zabbix-agent sudo fancontrol apache2 mpt-statusd snmpd mysql slapd webmin atd ssh acpid rsync postfix exim4 cron bootlogs single rmnologin stop-bootlogd rc.local pm2_produit
pm2_produit: portmap nfs-common rsyslog vmware-tools mpt-statusd snmpd postfix mysql slapd zabbix-agent exim4 webmin apache2 atd bootlogs sudo ssh fancontrol acpid rsync cron

En effet en mettant $all il se lance en S22 mais cela ne résout toujours pas mon problème. Comment puis je faire pour qu’il se lance en tout dernier ? Si mon problème vient de la !

Solution 1: Rajoute «rc.local» dans la liste de Required-Start
Solution 2: Met ton script dans /etc/rc.local qui est exécuté à la fin

Solution 3 plus générale et sans doute correcte: Il te faut attendre que les scripts d’initialisation soient finis, rajoute un «sleep 10» avant l’exécution de pm2…

[quote=“fran.b”]Solution 1: Rajoute «rc.local» dans la liste de Required-Start
Solution 2: Met ton script dans /etc/rc.local qui est exécuté à la fin

Solution 3 plus générale et sans doute correcte: Il te faut attendre que les scripts d’initialisation soient finis, rajoute un «sleep 10» avant l’exécution de pm2…[/quote]

Je vais tester tout cela et je te tiens au courant.

Bon je viens de tester en mettant $rc.local dans Required-Start et d’ajouter un sleep 10 mais sans succès.
Je voudrais tester d’insérer ma ligne de commande dans rc.local mais je ne sais pas ou.

voici le script rc.loca:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          rc.local
# Required-Start:    $remote_fs $syslog $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Run /etc/rc.local if it exist
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/init/vars.sh
. /lib/lsb/init-functions

do_start() {
        if [ -x /etc/rc.local ]; then
                [ "$VERBOSE" != no ] && log_begin_msg "Running local boot scripts (/etc/rc.local)"
                /etc/rc.local
                ES=$?
                [ "$VERBOSE" != no ] && log_end_msg $ES
                return $ES
        fi
}

case "$1" in
    start)
        do_start
        ;;
    restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
    stop)
        ;;
    *)
        echo "Usage: $0 start|stop" >&2
        exit 3
        ;;
esac

Ou je dois l’insérer ?

Merci de vos retours.

Comme rc.local est un vrai service et pas un service virtuel, il ne faut pas de $ devant.

C’est indiqué dans l’en-tête du script rc.local :

C’est indiqué dans l’en-tête du script rc.local :

Je voulais dire à l’intérieur du script :slightly_smiling:

Tu mets le lancement de ton script dans le fichier /etc/rc.local en n’oubliant pas de faire un chmod +x /etc/rc.local. Mais mettre rc_local dans le Required-Start n’a pas fonctionné? As tu pensé à faire un insserv après tes modifications pour recréer les fichiers de dépendances des scripts?