Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/04/2013, à 15:16

Zaphod-Beeblebrox

[RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

Bonjour,

Je cherche à lancer un script bash tout bête au démarrage / redémarrage d'ubuntu.

Voici le script en question:

#!/bin/bash

echo "bonjour"
sleep 1
echo "adios!"
echo "le script de test s'est bien lancé" > logscript.txt

exit 0;

Je l'ai testé et il fonctionne correctement, il m'affiche bien bonjour et adios! dans la console et inscrit bien le script de test s'est bien lancé dans le fichier logscript.txt créé pour l'occasion.

ensuite comme dit un peu partout sur internet, j'ai copié mon script (et son fichier logscript.txt) dans le répertoire etc/init.d, je leurs ai donné les droits d'exécution et j'ai créé le lien symbolique avec respectivement les commandes suivantes:

sudo cp script.sh /etc/init.d
sudo cp logscript.txt /etc/init.d
sudo chmod 777 /etc/init.d/script.sh 
sudo chmod 777 /etc/init.d/logscript.txt 
sudo update-rc.d script.sh defaults 

j'ai donc redémarré mon ubuntu mais le script ne semble pas se lancer puisque rien ne s'est écrit dans mon fichier logscript.txt.

Après un second essai j'ai remarqué le bonjour et adios! de mon script s'écrire sous UBUNTU 10.04 dans la fenêtre de fermeture juste avant que le pc s'éteigne! Je suis retourné dans le fichier texte mais toujours rien d'écrit ce qui rend le tout encore plus bizarre.

Donc apparemment mon script se lance à la fermeture d'ubuntu au lieu du démarrage, pourquoi?

Une bonne âme pour m'aider à démêler tout ça?

Merci.

Dernière modification par Zaphod-Beeblebrox (Le 24/04/2013, à 20:02)


"c'est bien la pire folie que de vouloir être sage dans un monde de fous" (Erasme)

Hors ligne

#2 Le 22/04/2013, à 15:27

pingouinux

Re : [RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

Bonjour,
Essaye en mettant le chemin complet de logscript.txt dans le script.

Hors ligne

#3 Le 22/04/2013, à 15:41

Zaphod-Beeblebrox

Re : [RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

j'ai mis le chemin complet du fichier logscript.txt et effectivement ça fonctionne, le script écrit bien dedans. Merci smile

Maintenant reste plus qu'a comprendre pourquoi le script s'exécute au sortir d'ubuntu et pas au démarrage (à moins qu'il fasse les deux hmm)


"c'est bien la pire folie que de vouloir être sage dans un monde de fous" (Erasme)

Hors ligne

#4 Le 22/04/2013, à 15:48

pingouinux

Re : [RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

Pour t'en assurer :

date >> /chemin/…/logscript.txt
echo "le script de test s'est bien lancé" >> /chemin/…/logscript.txt

Hors ligne

#5 Le 22/04/2013, à 16:20

Zaphod-Beeblebrox

Re : [RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

Je viens de modifier mon script pour qu'il me donne la date de fonctionnement du script dans le fichier logscript.txt. (J'ai eu la même idée que toi donc sauf que j'ai procédé différemment)

Bref le script se lance à l'arrêt et au démarrage quand j'arrête le pc puis que je le réallume.

Quand je fait redémarrer maintenant c'est différent, le script se lance qu'une fois au démarrage.


"c'est bien la pire folie que de vouloir être sage dans un monde de fous" (Erasme)

Hors ligne

#6 Le 22/04/2013, à 21:27

tiramiseb

Re : [RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

Salut,

Les scripts dans /etc/init.d doivent attendre un argument "start", "stop" ou "restart", par exemple :

/etc/init.d/tonscript start
/etc/init.d/tonscript stop
/etc/init.d/tonscript restart

Donc ton script doit plutôt ressembler à :

#!/bin/bash

case "$1" in
  start)
    echo "bonjour"
    sleep 1
    echo "adios!"
    echo "le script de test s'est bien lancé" > logscript.txt
    ;;
  stop)
    echo "je m'arrête !"
    ;;
  restart)
    $0 stop
    $0 start
    ;;
  *)
    echo "Usage : $0 <start|stop|restart>
    exit 3
    ;;
esac

Hors ligne

#7 Le 23/04/2013, à 15:41

Zaphod-Beeblebrox

Re : [RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

merci tiramiseb!

Je crois que j'aurais pu chercher encore longtemps, je croyais que c'était simplement une histoire de placer le script au bon endroit pour qu'il soit exécuté au démarrage et non qu'il faille le modifier comme tel.

Bref, le script fonctionne bien mais j'ai remarqué que lorsque je fait redémarrer, le script n'est pas appelé avec le paramètre "restart" comme on pourrait croire, mais avec le paramètre "stop" puis avec le paramètre "start".

Pour information, savez vous dans quel cas de figure le script est appelé avec le paramètre "restart"?


Autre question: Mon but avec tout ça c'est d'exécuter un script au démarrage de mon serveur. Seulement ce script, pour prendre un raccourci, se résume à une boucle qui teste la connexion internet.
Là où je veux en venir c'est: est-ce que dans son fonctionnement, ubuntu attend qu'un script lancé automatiquement au démarrage se finisse pour exécuter le reste de ses processus (dans ce cas mon script empêcherait mon serveur de se charger correctement) ou non?

merci.


"c'est bien la pire folie que de vouloir être sage dans un monde de fous" (Erasme)

Hors ligne

#8 Le 23/04/2013, à 17:55

tiramiseb

Re : [RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

Pour information, savez vous dans quel cas de figure le script est appelé avec le paramètre "restart"?

Lorsque tu redémarres le service (et non le serveur), typiquement avec la commande :

/etc/init.d/ton_script restart

Là où je veux en venir c'est: est-ce que dans son fonctionnement, ubuntu attend qu'un script lancé automatiquement au démarrage se finisse pour exécuter le reste de ses processus

Oui, car ces scripts sont faits pour exécuter des démons (processus qui se mettent en arrière-plan).


ce script, pour prendre un raccourci, se résume à une boucle qui teste la connexion internet.

Ne jamais faire de script qui font des boucles : si, pour une raison ou une autre, ton script est arrêté (un plantage, un bug, un kill maladroit (ou pas maladroit), etc) bah il ne se relancera pas et bye bye ses fonctionnalités.


Pour des actions régulières, utilise cron :
1/ extrais la partie "intelligente" de ton script
2/ mets-la seule dans un scripts
3/ ajoute une ligne dans /etc/crontab ou alors un fichier dans /etc/cron.d en précisant la périodicité d'exécution ; par exemple, pour un script qui s'exécuterait en root toutes les 2 minutes :

*/2 * * * *    root    /usr/local/bin/mon_script.sh

Dernière modification par tiramiseb (Le 23/04/2013, à 17:56)

Hors ligne

#9 Le 23/04/2013, à 19:09

nesthib

Re : [RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

Comme tu es sur ubuntu, je te recommande l'utilisation d'upstart qui est plus souple et plus simple à configurer qu'init.
Les fichiers de conf sont à placer dans /etc/init/ et en gros tu auras quelque chose du genre :

description "nom_du_script"
author "Zaphod-Beeblebrox"

start on runlevel [2345]
stop on runlevel [016]

# si le script n'a pas besoin de root
setuid ton_utilisateur
setgid ton_utilisateur

env HOME=/home/ton_utilisateur
exec /chemin/vers/le/script.sh

NB. avec upstart tu peux aussi définir que ton script soit lancé seulement si le système de fichier est monté et le réseau fonctionnel :

start on (local-filesystems and net-device-up IFACE!=lo)

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#10 Le 23/04/2013, à 19:29

Zaphod-Beeblebrox

Re : [RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

Ah d'accord, merci pour tout ces conseils! Ça va considérablement me simplifier la vie.


"c'est bien la pire folie que de vouloir être sage dans un monde de fous" (Erasme)

Hors ligne

#11 Le 24/04/2013, à 15:33

Zaphod-Beeblebrox

Re : [RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

Sur mon pc de test:
J'ai ajouté un fichier dans le répertoire cron.d comme décrit ci-dessus et ça à tout de suite fonctionné.

Sur mon serveur:
Bah...j'ai fait tout pareil mais rien à faire, le script n'est pas lancé une seule fois. Je l'ai redémarrer au cas où mais ça n'a rien changé. 
J'ai fait cette manipulation via ssh depuis une machine sous windows (avec PuTTY) en serais-ce la cause?


"c'est bien la pire folie que de vouloir être sage dans un monde de fous" (Erasme)

Hors ligne

#12 Le 24/04/2013, à 15:40

nesthib

Re : [RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

Pour modifier ton crontab, le mieux est de passer par la commande :

crontab -e

Peux-tu comparer le retour, sur chaque machine, de la commande :

crontab -l

(en root, si tu avais modifié le crontab root)


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#13 Le 24/04/2013, à 15:52

Zaphod-Beeblebrox

Re : [RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

Alors, avec la commande

crontab -l

pour chaque machines j'ai une réponse identique: no crontab for **** (****=nom de la machine)


"c'est bien la pire folie que de vouloir être sage dans un monde de fous" (Erasme)

Hors ligne

#14 Le 24/04/2013, à 16:08

nesthib

Re : [RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

Essaie de modifier le crontab comme je t'ai indiqué, en utilisant :

crontab -e

Utilise des chemins absolus et si ça ne fonctionne pas, au lieu de simplement dire que ça ne fonctionne pas, donne tous les détails de ce que tu as fait.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#15 Le 24/04/2013, à 16:31

Zaphod-Beeblebrox

Re : [RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

J'ai édité crontab avec

crontab -e

J'obtient maintenant, en retour de la commande

crontab -l

*/2 * * * *    root    /home/server/hello.sh.


Utilise des chemins absolus et si ça ne fonctionne pas, au lieu de simplement dire que ça ne fonctionne pas, donne tous les détails de ce que tu as fait.

J'ai toujours utilisé des chemins absolus. Je n'ai rien fait d'autre que ce que j'ai déjà décrit.

Le script hello.sh ecrit donc hello dans un fichier hello.txt. Le script fonctionne. L'édition de la crontab n'a rien changé, ça ne fonctionne toujours pas. neutral

--- Edit: ---

Je viens de ré-allumer mon pc de test sur lequel l'ajour d'un fichier dans etc/cron.d avait fonctionné du 1er coup. Je m'attendais en toute logique à voir mon script d'essai se lancer toutes les 2minutes mais non, ça ne fonctionne plus. C'est à en devenir marteau... neutral

Dernière modification par Zaphod-Beeblebrox (Le 24/04/2013, à 17:21)


"c'est bien la pire folie que de vouloir être sage dans un monde de fous" (Erasme)

Hors ligne

#16 Le 24/04/2013, à 18:15

Zaphod-Beeblebrox

Re : [RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

Je crois que je progresse, je m'explique:

J'ai lu que cron envoyait des mail dans /var/mail en cas de souci. Je m'y suis rendu et j'ai constaté d'une part que cron fonctionne (il a envoyé un message toutes les 2minutes) et d'autre part il indiquait l'erreur suivante: /bin/sh: root: not found
et ceci pour la commande:

*/2 * * * *    root    /home/server/hello.sh.

J'ai donc modifié la commande comme suit:

*/2 * * * *    /home/server/hello.sh.

mais à présent j'obtient l'erreur suivante: /bin/sh: /home/server104/hello.sh: Permission denied.


"c'est bien la pire folie que de vouloir être sage dans un monde de fous" (Erasme)

Hors ligne

#17 Le 24/04/2013, à 18:22

tiramiseb

Re : [RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

Avant tout, une petite mise au point.
Les crons édités avec la commande "crontab -e" et listés avec la commande "crontab -l" sont les crons utilisateurs.
Ce que tu souhaites faire ça ressemble plus à une tâche système, c'est pourquoi c'est à mettre dans /etc/crontab ou dans /etc/cron.d/.
C'est une très mauvaise habitude que de mettre des tâches système dans les crons utilisateurs.

Ensuite :

d'autre part il indiquait l'erreur suivante: /bin/sh: root: not found

Oui car pour les crons utilisateurs il ne faut pas préciser sous quel utilisateur faire fonctionner la tâche, vu que ce sont des crons utilisateurs.
Les tâches systèmes, de leur côté, il faut leur dire en tant que quel utilisateur fonctionner.
Donc, dans ce cadre (qui est une mauvaise habitude pour ton cas), il faut en effet enlever "root".


Le script fonctionne

Comment l'exécutes-tu pour dire qu'il fonctionne ?
Quel est son contenu ?


PS : à la fin des lignes de cron tu as un point après "hello.sh", c'est normal !?

Hors ligne

#18 Le 24/04/2013, à 18:51

Zaphod-Beeblebrox

Re : [RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

Pour l'histoire du point je me suis  trompé en écrivant mon message.

Comment l'exécutes-tu pour dire qu'il fonctionne ?
Quel est son contenu ?

le contenu du script hello.sh:

#!/bin/bash

echo "HELLOOOOOOOOOOOOOO..."
echo "hello" >> /home/server/hello.txt
exit 0;

Je l'ai exécuté en manuel avec cette ligne de commande:

bash hello.sh

Je vais éditer /etc/contab et voir ce que ça donne.


"c'est bien la pire folie que de vouloir être sage dans un monde de fous" (Erasme)

Hors ligne

#19 Le 24/04/2013, à 18:58

tiramiseb

Re : [RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

Et si tu l'exécutes de la manière suivante ?

./hello.sh

Il est fort probable que tu n'aies pas rendu ce script exécutable.
Alors comme argument à bash ça passe, mais pas exécuté en direct.

Si j'ai juste, soit tu le rends exécutables (chmod a+x hello.sh) soit tu mets "bash /home/machintruc/hello.sh" dans le cron.


Par ailleurs, un "exit 0" à la fin d'un script est inutile, le code retour par défaut étant déjà 0.

Hors ligne

#20 Le 24/04/2013, à 19:28

nesthib

Re : [RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

/bin/bash dans le cron, par défaut il n'y a pas de PATH wink


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#21 Le 24/04/2013, à 19:33

tiramiseb

Re : [RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

nesthib a écrit :

/bin/bash dans le cron, par défaut il n'y a pas de PATH wink

Pom pom pom...

sebastien@cao:~$ cat /etc/crontab 
[...]
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
[...]
* * * * * root echo "$PATH" >> /tmp/plop
sebastien@cao:~$ cat /tmp/plop
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

Vivent les cron système...

Dernière modification par tiramiseb (Le 24/04/2013, à 19:33)

Hors ligne

#22 Le 24/04/2013, à 20:02

Zaphod-Beeblebrox

Re : [RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

oh bravo, j'ai compris ma boulette...

Il est fort probable que tu n'aies pas rendu ce script exécutable.
Alors comme argument à bash ça passe, mais pas exécuté en direct.

Si j'ai juste, soit tu le rends exécutables (chmod a+x hello.sh) soit tu mets "bash /home/machintruc/hello.sh" dans le cron.

c'est tout à fait ça, le script n'avait pas les autorisations, j'étais persuadé de l'avoir fait sauf que dans ma précipitation ce matin j'ai fait un chmod sur hello.txt au lieu de hello.sh hmm hmm hmm

donc j'ai viré la ligne dans le cron utilisateur et je l'ai mise dans /etc/crontab, j'ai donné les autorisations au script et ça marche.

J'ai édité crontab pour lancer le vrai script, ça fonctionne big_smile

Merci à tous pour l'aide, c'est sympas!


"c'est bien la pire folie que de vouloir être sage dans un monde de fous" (Erasme)

Hors ligne

#23 Le 24/04/2013, à 20:46

nesthib

Re : [RESOLU] Script qui se lance à la fermeture au lieu du démarrage!

@tiramiseb : je parlais du cron utilisateur, utiliser le cron système sans en avoir vraiment besoin, AMHA c'est une mauvaise chose (à Zaphod-Beeblebrox de voir si c'est le cas ou non) wink


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne