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 17/10/2016, à 13:17

SimonLefort

Script au démarrage qui se lance plusieurs fois ?

Bonjour,

J'essaye de faire un script qui démarre une connexion 3G sur une carte embarquée.
Le script fonctionne quand je le lance manuellement. Quand je le lance automatiquement, je récupère parfois une adresse IP mais la configuration dhcp ne tient pas. (Elle tient 1 ou 2 minutes...)

J'ai l'impression que la commande "dhclient eth0" se lance plusieurs fois. (je la vois deux fois quand j'utilise "ps aux | grep dhclient"). J'ai supprimé "network-manager" parce que je le soupçonnais de mettre le bazard mais ça n'a pas réglé le problème...

Auriez-vous des pistes pour avancer ?
Est-ce que les "sleep" peuvent poser un problème ?

Uname:

$ uname -a
Linux percepto1 3.10.40+ #84 SMP PREEMPT Thu Aug 4 13:09:36 IDT 2016 armv7l armv7l armv7l GNU/Linux

Le script:

~$ cat /home/admin/scripts/connect_LTE.sh
#!/bin/bash

#connecter la carte 3G
echo 166 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio166/direction
sleep 0.5
echo 1 > /sys/class/gpio/gpio166/value
sleep 10

#vérifier si la partie précédente a bien fonctionné:
test -e /sys/class/gpio/gpio166/value

if [ $? == 0 ]
then
    cd /home/admin/LTETools/ 
    ./pcmarm ./slqssdk 0 &

    sleep 10

    dhclient eth0 & 
else
    echo "Il faut lancer le script avec \"sudo\" devant."
fi

Le script dans /etc/init/ :

~$ cat /etc/init.d/connect_LTE 
#! /bin/sh
### BEGIN INIT INFO
# Provides:          LTE Connexion
# Required-Start:    $local_fs $syslog $network
# Required-Stop:     $local_fs $syslog $network
# Should-Start:      $portmap
# Should-Stop:       $portmap
# X-Start-Before:    nis
# X-Stop-After:      nis
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Init LTE Network
# Description:       Fichier d'init pour lancer le réseau LTE au boot
### END INIT INFO

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

bash /home/admin/scripts/connect_LTE.sh

On lance update-rc.d :

~$ sudo update-rc.d connect_LTE defaults
 Adding system startup for /etc/init.d/connect_LTE ...
   /etc/rc0.d/K20connect_LTE -> ../init.d/connect_LTE
   /etc/rc1.d/K20connect_LTE -> ../init.d/connect_LTE
   /etc/rc6.d/K20connect_LTE -> ../init.d/connect_LTE
   /etc/rc2.d/S20connect_LTE -> ../init.d/connect_LTE
   /etc/rc3.d/S20connect_LTE -> ../init.d/connect_LTE
   /etc/rc4.d/S20connect_LTE -> ../init.d/connect_LTE
   /etc/rc5.d/S20connect_LTE -> ../init.d/connect_LTE

Dernière modification par SimonLefort (Le 17/10/2016, à 13:20)

Hors ligne

#2 Le 17/10/2016, à 15:06

SimonLefort

Re : Script au démarrage qui se lance plusieurs fois ?

Quelques compléments d'informations :

Quand je boote, je n'ai pas encore le réseau mais "dhclient" tourne :

~$ ps aux | grep dhc
root      1824  0.0  0.1   3940  2828 ?        S    01:00   0:00 dhclient eth0
root      2149  0.2  0.0   2456  1328 ?        S    01:00   0:00 /bin/bash /sbin/dhclient-script
root      2158  0.0  0.0   1292   436 ?        S    01:00   0:00 run-parts --arg=-a --arg=eth0.dhclient /etc/resolvconf/update.d
admin     2219  0.0  0.0   3748   664 pts/7    S+   01:01   0:00 grep --color=auto dhc

Je récupère une IP :

~$ ifconfig 
eth0      Link encap:Ethernet  HWaddr c2:5c:ad:21:4b:08  
          inet addr:100.xxx.yyy.zzz  Bcast:100.xxx.yyy.zzz  Mask:255.255.255.248
          inet6 addr: fe80::c05c:adff:fe21:4b08/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1430  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:68 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:948 (948.0 B)  TX bytes:11582 (11.5 KB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:464 errors:0 dropped:0 overruns:0 frame:0
          TX packets:464 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:36784 (36.7 KB)  TX bytes:36784 (36.7 KB)

usb0      Link encap:Ethernet  HWaddr ee:69:58:25:30:f9  
          inet addr:10.0.0.2  Bcast:10.255.255.255  Mask:255.0.0.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Pendant que j'ai le réseau, je vois toujours un "dhclient" qui tourne :

~$ ps aux | grep dhc
root      2227  0.0  0.0   3940  1880 ?        Ss   01:01   0:00 dhclient eth0
admin     2278  0.0  0.0   3744   664 pts/10   S+   01:01   0:00 grep --color=auto dhc

Et je perds le réseau à un moment, sans raison apparente :

~$ ping google.com
PING google.com (172.217.17.46) 56(84) bytes of data.
64 bytes from ams16s29-in-f14.1e100.net (172.217.17.46): icmp_seq=71 ttl=50 time=40.4 ms
(...)
ping: sendmsg: Network is unreachable
(...)

Après avoir perdu le réseau, j'ai deux instances de "dhclient":

~$ ps aux | grep dhc
root      2227  0.0  0.1   3940  2008 ?        Ss   01:01   0:00 dhclient eth0
root      2505  0.0  0.1   4068  2828 ?        S    01:02   0:00 dhclient eth0
admin     2616  0.0  0.0   3744   664 pts/10   S+   01:04   0:00 grep --color=auto dhc

Hors ligne

#3 Le 17/10/2016, à 15:13

jplemoine

Re : Script au démarrage qui se lance plusieurs fois ?

Je vais peut-être (surement) dire une bêtise mais je pense qu'il y a un problème :

~$ sudo update-rc.d connect_LTE defaults

De mémoire, ça le lance avec le runlevel 1 et 2 (et donc 2 fois).
Il ne faut le faire que sur un seul des 2 runlevels.


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#4 Le 17/10/2016, à 15:36

SimonLefort

Re : Script au démarrage qui se lance plusieurs fois ?

J'ai modifié mon script dans /etc/init.d/ :

~$ sudo vim /etc/init.d/connect_LTE 
(...)
# Default-Start:     2 
# Default-Stop:      0 1
(...)

J'ai supprimé les anciens liens dans /etc/rc*.d/ :

~$ sudo update-rc.d -f connect_LTE remove

Et j'ai recréé des liens avec les bons (je crois) runlevel :

~$ sudo update-rc.d connect_LTE start 20 2 . stop 80 0 1 .

(source)

Je teste et je viens éditer en fonction du résultat.
[Edit: Ça ne marche pas, j'ai le même problème qu'avant! Je récupère une adresse IP, j'ai du réseau, ... et puis un deuxième "dhclient eth0" est lancé (par quoi?) et je perds la configuratoin dhcp. :'-(

Dernière modification par SimonLefort (Le 17/10/2016, à 16:02)

Hors ligne