IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Pb script SH - "cd" - "ftp" - "appel autre script SH"


Sujet :

Linux

  1. #1
    Invité
    Invité(e)
    Par défaut Pb script SH - "cd" - "ftp" - "appel autre script SH"
    Alors voilà, j'ai trois petits scripts SH (très simples pourtant) que je n'arrive pas à faire tourner correctement.

    backup.sh :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    #!/bin/sh
    cd /var/backup
    sh ftpgetfr.sh 2>> /var/backup/errget.txt
    tar -cvzf www.tgz /var/www
    tar -xvvzf ccf_edu_member.sql.tgz
    tar -xvvzf ccf_newsletters_member.sql.tgz
    tar -xvvzf ccf_120_member.sql.tgz
    tar -xvvzf tbl_members.sql.tgz
    unlink ccf_edu_member.sql.tgz
    unlink ccf_newsletters_member.sql.tgz
    unlink ccf_120_member.sql.tgz 
    unlink tbl_members.sql.tgz
    mysql --force -per4makoli  mailing < ccf_edu_member.sql
    mysql --force -per4makoli  mailing < ccf_newsletters_member.sql
    mysql --force -per4makoli  mailing < ccf_120_member.sql
    mysqldump -per4makoli mailing > mailing.sql
    mysqldump -per4makoli newsletters > newsletters.sql
    mysqldump -per4makoli mysql > mysql.sql
    mysqldump -per4makoli forum > forum.sql
    mysqldump -per4makoli forum3 > forum3.sql
    sh ftpputcf.sh 2>> /var/backup/errput.txt
    ftpgetfr.sh :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    #!/bin/sh
    cd /var/backup
    HOST='IPxxxxx'
    USER='USERxxxxx'
    PASSWD='PASSxxxxxxx'
    DIR='/public_html/scripts/'
    FILE1='ccf_edu_member.sql.tgz'
    FILE2='ccf_newsletters_member.sql.tgz'
    FILE3='ccf_120_member.sql.tgz'
    FILE4='tbl_members.sql.tgz'
    ftp -n $HOST <<END_SCRIPT
    quote USER $USER
    quote PASS $PASSWD
    quote CWD $DIR
    get $FILE1
    get $FILE2
    get $FILE3
    get $FILE4
    quit
    END_SCRIPT
    exit 0
    ftpputcf.sh :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    #!/bin/sh
    cd /var/backup
    HOST='IPxxxxx'
    USER='USERxxxxx'
    PASSWD='PASSxxxxxxx'
    FILE1='mailing.sql'
    FILE2='newsletters.sql'
    FILE3='mysql.sql'
    FILE4='forum.sql'
    FILE5='forum3.sql'
    FILE6='www.tgz'
    FILE7='tbl_members.sql'
    DIR='backupweb'
    ftp -n $HOST <<END_SCRIPT
    quote USER $USER
    quote PASS $PASSWD
    quote CWD $DIR
    put $FILE1
    put $FILE2
    put $FILE3
    put $FILE4
    put $FILE5
    put $FILE6
    put $FILE7
    quit
    END_SCRIPT
    exit 0
    Quand j'exécute mon fichier backup.sh ça me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    debian:/var/backup# sh backup.sh
     
    : No such file or directory/backup
    Login incorrect.
    Please login with USER and PASS
    Please login with USER and PASS
    Please login with USER and PASS
    Please login with USER and PASS
    Please login with USER and PASS
    Please login with USER and PASS
    Please login with USER and PASS
    Please login with USER and PASS
    Please login with USER and PASS
    ?Invalid command
    tar: Removing leading `/' from member names
    tar: /var/www\r: Cannot stat: No such file or directory
    tar: Error exit delayed from previous errors
    tar: ccf_edu_member.sql.tgz\r: Cannot open: No such file or directory
    tar: Error is not recoverable: exiting now
    tar: Child returned status 2
    tar: Error exit delayed from previous errors
    tar: ccf_newsletters_member.sql.tgz\r: Cannot open: No such file or directory
    tar: Error is not recoverable: exiting now
    tar: Child returned status 2
    tar: Error exit delayed from previous errors
    tar: ccf_120_member.sql.tgz\r: Cannot open: No such file or directory
    tar: Error is not recoverable: exiting now
    tar: Child returned status 2
    tar: Error exit delayed from previous errors
    tar: tbl_members.sql.tgz\r: Cannot open: No such file or directory
    tar: Error is not recoverable: exiting now
    tar: Child returned status 2
    tar: Error exit delayed from previous errors
    unlink: cannot unlink `ccf_edu_member.sql.tgz\r': No such file or directory
    unlink: cannot unlink `ccf_newsletters_member.sql.tgz\r': No such file or directory
    unlink: cannot unlink `ccf_120_member.sql.tgz\r': No such file or directory
    unlink: cannot unlink `tbl_members.sql.tgz\r': No such file or directory
    : No such file or directory_member.sql
    : No such file or directorysletters_member.sql
    : No such file or directory_member.sql
    ?Invalid command
    Il doit y avoir plusieurs erreurs...
    Déjà à la première ligne le "cd" déconne je ne sais pas pourquoi
    Il ne lance pas non plus les appels vers les 2 autres scripts SH, apparemment faute de droits ??! (j'ai pourtant tout mis en chmod -x)

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    plusieurs choses :
    un script se developpe comme un application en n'importe quel language donc :
    TESTER les code retour !
    ne jamais suposer que le PATH est a jours (sh ftpgetfr.sh au lieu de sh /toto/tata/ftpxxxx)
    .
    tester par "bout" : as tu lancé ftpgetfr.sh isolement ?
    apparement c'est ta syntaxes de connection ftp qui va pas

  3. #3
    Invité
    Invité(e)
    Par défaut
    En effet... le problème vient de ma connexion ftp.
    J'ai donc modifié mon code afin de tester avec le strict minimum.

    Mon script ftpgetfr.sh:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/sh
    echo ftpgetfr_debut
    ftp -ndv ipxxxxxxxx <<TOTO
    quote user userxxxxxx
    quote pass passxxxxxxxx
    TOTO
    echo ftpgetfr_fin
    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    debian:/var/backup# sh /var/backup/ftpgetfr.sh
    ftpgetfr_debut
    Connected to ipxxxxxxxx.
    220 ProFTPD 1.2.10 Server (ProFTPD Default Installation) [ipxxxxxxxx]
    ftp: setsockopt: Bad file descriptor
    ---> SYST
    215 UNIX Type: L8
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ---> USER userxxxxxx
    331 Password required for userxxxxxx.
    ---> PASS XXXX
    530 Login incorrect.
    Login failed.
    Passive mode on.
    ---> QUIT
    221 Goodbye.
    ftpgetfr_fin
    Mon login userxxxxxx/passxxxxxxxx est pourtant correct. La preuve, quand je fais la même chose ligne par ligne directement dans le shell ça marche nickel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    debian:/var/backup# ftp -ndv ipxxxxxxxx
    Connected to ipxxxxxxxx.
    220 ProFTPD 1.2.10 Server (ProFTPD Default Installation) [ipxxxxxxxx]
    ftp: setsockopt: Bad file descriptor
    ---> SYST
    215 UNIX Type: L8
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> user userxxxxxx
    ---> USER userxxxxxx
    331 Password required for userxxxxxx.
    Password:
    ---> PASS XXXX
    230 User userxxxxxx logged in.
    ---> SYST
    215 UNIX Type: L8
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> quit
    ---> QUIT
    221 Goodbye.
    Je comprends pas... il interprète mon sh de travers ou quoi ?

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    si cela fonctionne en "manuelle" essaye avec le fichier d'initialisation ftp .netrc (man .netrc ou man netrc) ATTENTION ce fichier doit se trouver dans le $HOME ET etre a 600 en droit.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci beaucoup ! La mise en place du /root/.netrc m'a désormais permis au moins de me connecter au ftp à partir du script.
    Cependant, j'ai d'autres soucis par la suite avec les commandes basiques ftp qui marchent correctement manuellement mais pas dans le script :

    ftpputcf.sh :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #!/bin/sh
    echo ftpputcf_debut
    pftp -dv 192.168.1.1 <<TOTO
    pasv
    pwd
    list
    dir
    ls
    quote PASV
    quote pwd
    quote list
    quote dir
    quote ls
    quote quit
    quit
    TOTO
    echo ftpputcf_fin
    A l'exécution ce script donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    debian:/var/backup# sh /var/backup/ftpputcf.sh
    ftpputcf_debut
    Connected to 192.168.1.1.
    220-Microsoft FTP Service
        Bienvenue sur le FTP...
    220 Hello !
    ---> USER ftpuser
    331 Password required for ftpuser.
    ---> PASS XXXX
    230 User ftpuser logged in.
    ---> SYST
    215 Windows_NT
    Remote system type is Windows_NT.
    ?Invalid command
    ?Invalid command
    ?Invalid command
    ?Invalid command
    ?Invalid command
    ---> PASV
    227 Entering Passive Mode (192,168,1,1,107,25).
    ---> pwd
    257 "/" is current directory.
    ---> list
    425 Can't open data connection.
    ---> dir
    500 'DIR': command not understood
    ---> ls
    500 'LS': command not understood
    ---> quit
    221
    ?Invalid command
    ---> QUIT
    ftpputcf_fin
    Pourtant la même chose manuellement directement dans le shell donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    debian:/var/backup# pftp -dv 192.168.1.1
    ftpputcf_debut
    Connected to 192.168.1.1.
    220-Microsoft FTP Service
        Bienvenue sur le FTP...
    220 Hello !
    ---> USER ftpuser
    331 Password required for ftpuser.
    ---> PASS XXXX
    230 User ftpuser logged in.
    ---> SYST
    215 Windows_NT
    Remote system type is Windows_NT.
    ftp> pasv
    ?Invalid command
    ftp> pwd
    ---> PWD
    257 "/" is current directory.
    ftp> list
    ?Invalid command
    ftp> dir
    ---> PASV
    227 Entering Passive Mode (192,168,1,1,106,163).
    ---> LIST
    125 Data connection already open; Transfer starting.
    06-22-05  04:55PM       <DIR>
    01-17-05  11:07AM       <DIR>          _private
    226 Transfer complete.
    ftp> ls
    ---> PASV
    227 Entering Passive Mode (192,168,1,1,106,164).
    ---> LIST
    125 Data connection already open; Transfer starting.
    06-22-05  04:55PM       <DIR>
    01-17-05  11:07AM       <DIR>          _private
    226 Transfer complete.
    ftp> quote pasv
    ---> pasv
    227 Entering Passive Mode (192,168,1,1,107,12).
    ftp> quote pwd
    ---> pwd
    257 "/" is current directory.
    ftp> quote list
    ---> list
    425 Can't open data connection.
    ftp> quote dir
    ---> dir
    500 'DIR': command not understood
    ftp> quote ls
    ---> ls
    500 'LS': command not understood
    ftp> quote quit
    ---> quit
    221
    ftp> quit
    ---> QUIT
    Bizarre... ces tests montrent bien une interprétation différente :/
    Seules les commandes "quote PASV" et "quote pwd" de mon script ont été bien acceptées par le serveur ftp !

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 957
    Points : 4 386
    Points
    4 386
    Par défaut
    Citation Envoyé par koalaurent
    Merci beaucoup ! La mise en place du /root/.netrc m'a désormais permis au moins de me connecter au ftp à partir du script.
    Cependant, j'ai d'autres soucis par la suite avec les commandes basiques ftp qui marchent correctement manuellement mais pas dans le script :

    Bizarre... ces tests montrent bien une interprétation différente :/
    Seules les commandes "quote PASV" et "quote pwd" de mon script ont été bien acceptées par le serveur ftp !
    (sans avoir regarder le détail du code…)
    ne jamais perdre de vue que certains programmes interactifs testent s'ils sont réellement connectés à un terminal ou si le flux de commandes vient d'un stream et agissent différement dans chaque cas…
    il n'est donc pas impossible que cela soit le cas de votre client FTP…

    que ce genre de situation, la seule solution reste l'utilisation de expect qui lui fera croire au programme qu'il est réellement connecté à un terminal……

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Resultat
    Code Resultat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    Debut de transfert FTP
    Connected to <HOST_IP>.
    220 <HOST_IP> FTP server ready
    ftp: setsockopt: Bad file descriptor
    ---> SYST
    215 UNIX Type: L8
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ---> USER <LOGIN>
    331 Password required for <LOGIN>.
    ---> PASS XXXX
    230 User <LOGIN> logged in.
    ---> SYST
    215 UNIX Type: L8
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ---> TYPE I
    200 Type set to I
    ---> CWD <REPERTOIRE_DISTANT>
    250 CWD command successful
    local: Fichier.txt remote: SaveDB_Clients_2009_8.tar.bz2
    ---> PORT 192,168,33,42,128,14
    200 PORT command successful
    ---> STOR Fichier.txt
    150 Opening BINARY mode data connection for Fichier.txt
    226 Transfer complete.
    ---> TYPE A
    200 Type set to A
    ---> PORT 192,168,33,42,213,97
    200 PORT command successful
    ---> LIST
    150 Opening ASCII mode data connection for file list
    -rw-rw-rw-   1 <LOGIN> hdusers         0 Sep 15 16:03 Fichier.txt
    226 Transfer complete.
    ---> QUIT
    221 Goodbye.

    On voit clairement que les commandes qui suivent le script ftp ne sont pas exécutées ...

    Citation Envoyé par koalaurent Voir le message
    Je comprends pas... il interprète mon sh de travers ou quoi ?


    Je pense que la commande <quit> (idem avec <bye> et <exit>) s'exécute dans ftp et lorsque ftp se ferme, il transmet également un autre <quit> au shell qui sort alors du script (shell script) en cours d'execution


  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 587
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 587
    Points : 19 467
    Points
    19 467
    Par défaut
    Si ton script est rédiger de la même manière (avec la même indentation) que ce que tu nous présente, ce n'est pas si étonnant : il faut que le mot qui ferme les instructions ftp soit sur la première colonne (collé au bord de l'écran)...
    ?
    Document en ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    man -P'less -p "Document en ligne"' bash

Discussions similaires

  1. Appel autre script depuis 1er Script
    Par steph70 dans le forum Général Python
    Réponses: 7
    Dernier message: 26/05/2010, 06h24
  2. Script de livre d'or pollué par des spams : Solutions ? Autres scripts ?
    Par pointup dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 02/11/2006, 20h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo