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

Administration système Discussion :

Lien symbolique ne fonctionne pas entre serveur SFTP et une application


Sujet :

Administration système

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Points : 48
    Points
    48
    Par défaut Lien symbolique ne fonctionne pas entre serveur SFTP et une application
    Bonjour,

    J'ai installé sur une VM Ubuntu 20.04 LTS, sur lequel j'ai configuré un serveur SFTP sur lequel je peux me connecter depuis mon réseau sur lequel je peux acceder aux répertoires:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /var/sftp/IN
    /var/sftp/OUT
    J'ai une application java que j'ai installé sur ce serveur, qui convertit des fichiers en entrée en un autre format en sortie, cette application va chercher ses fichiers et déposer ses fichiers de sortie dans les répertoires suivants:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /home/toto/ENTREE
    /home/toto/SORTIE
    Les noms et chemins des répertoires ne peuvent pas être modifiés.

    Mais pour mes besoins, je voudrais que les fichiers de /var/sftp/IN apparaissent dans /home/toto/ENTREE et respectivement que les fichiers de sorties dans /home/toto/SORTIE apparaissent sur le SFTP dans /var/sftp/OUT

    Je pensais que cela fonctionnerait en créant un lien symbolique comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ln -s /var/sftp/IN /home/toto/ENTREE
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ln -s /var/sftp/OUT /home/toto/SORTIE
    ou encore:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ln -s  /home/toto/ENTREE /var/sftp/IN
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ln -s  /home/toto/SORTIE /var/sftp/OUT
    Mais cela ne fonctionne, dans un sens ou dans l'autre l'application Java semble ne pas vouloir écrire dans un lien symbolique, et lorsque je me connecte au SFTP, je ne peux pas consulter un répertoire qui est un lien symbolique.

    Auriez vous une idée sur comment procédé ?

    Merci
    yaume91

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 271
    Points : 13 536
    Points
    13 536
    Par défaut
    Bonjour

    Par tes commandes, tu ne fais pas un lien symbolique vers des fichiers mais vers le répertoire. Étudie la différence entre ce que tu fais et ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ln -s /var/sftp/IN/monfichier.txt /home/toto/ENTREE
    ln -s /home/toto/SORTIE/mon.resultat.txt /var/sftp/OUT
    Cela devrait marcher.

    Du coup, dans ton cas, il n'écrit pas dans un répertoire. Normal. Il veut un fichier.

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Points : 48
    Points
    48
    Par défaut
    Je me suis surement mal exprimé, mais ce que je souhaiterai, c'est que les fichiers que l'application java va créer dans le répertoire "/home/toto/SORTIE/ " soit téléchargeable par SFTP dans le répertoire " /var/sftp/OUT ".

    c'est pour cela que dans l'idéé je pensais que créé un lien symbolique entre les deux répertoires permettrait cela.

    Mais soit c'est l'application java qui refuse d'écrire ses fichiers dans le répertoire, soit le répertoire qui n'est pas consultable sur le SFTP.

    Je précise que les noms des fichiers générés par l'application java peuvent varier (ex: toto.txt , lili.jpg, fin.doc, ...)

  4. #4
    Membre actif Avatar de jisig
    Homme Profil pro
    null
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Indonésie

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Points : 273
    Points
    273
    Par défaut
    tu pourrais essayer de voir si tu peux accéder à tes liens (en lecture/écriture) via le terminal dans ta machine virtuelle avec le user qu'aura ton programme java, ensuite essaie de le faire via un client FTP (filezilla par exemple).
    Ensuite tu pourras voir si ça vient de ton programme java.

    Si ce n'est pas le cas, il faut vérifier les permissions de tes fichiers (lectures, écriture etc) pour le user/group avec lequel tu veux pouvoir y accéder.

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Points : 48
    Points
    48
    Par défaut
    pour lancer l'application java je me logue en tant que user: yaume

    sur mes repertoires ou l'application java va écrire ses fichiers j'ai appliqué les commandes suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    chmod 777 /home/toto/SORTIE
    chown yaume:yaume /home/toto/SORTIE
    lorsque mon répertoire est un vrai répertoire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mkdir /home/toto/SORTIE
    l'application java génère bien les fichiers dans ce répertoire sans erreur

    lorsque je créé un lien symbolique pour ce répertoire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ln -s /var/sftp/OUT /home/toto/SORTIE
    l'application java génère l'erreur suivante:
    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
    57
    58
    59
    60
    61
    62
    63
     
    2021-06-01 23:32:41.799 DEBUG 1875 --- [nio-8080-exec-5] o.s.web.servlet.DispatcherServlet        : Failed to complete request: java.nio.file.FileAlreadyExistsException: /home/SORTIE
    2021-06-01 23:32:41.822 ERROR 1875 --- [nio-8080-exec-5] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
     
    java.nio.file.FileAlreadyExistsException: /home/toto/SORTIE
            at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:94) ~[na:na]
            at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111) ~[na:na]
            at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116) ~[na:na]
            at java.base/sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:389) ~[na:na]
            at java.base/java.nio.file.Files.createDirectory(Files.java:690) ~[na:na]
            at java.base/java.nio.file.Files.createAndCheckIsDirectory(Files.java:797) ~[na:na]
            at java.base/java.nio.file.Files.createDirectories(Files.java:743) ~[na:na]
            at com.thalesgroup.ticketing.sis.controllers.SentenialSimulationController.saveDDFile(SentenialSimulationController.java:366) ~[classes!/:1.1.0]
            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
            at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
            at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
            at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.4.jar!/:5.3.4]
            at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) ~[spring-web-5.3.4.jar!/:5.3.4]
            at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.4.jar!/:5.3.4]
            at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.4.jar!/:5.3.4]
            at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.4.jar!/:5.3.4]
            at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.4.jar!/:5.3.4]
            at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) ~[spring-webmvc-5.3.4.jar!/:5.3.4]
            at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) ~[spring-webmvc-5.3.4.jar!/:5.3.4]
            at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.4.jar!/:5.3.4]
            at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.4.jar!/:5.3.4]
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) ~[tomcat-embed-core-9.0.43.jar!/:4.0.FR]
            at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.4.jar!/:5.3.4]
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.43.jar!/:4.0.FR]
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.43.jar!/:9.0.43]
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.4.jar!/:5.3.4]
            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.4.jar!/:5.3.4]
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.4.jar!/:5.3.4]
            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.4.jar!/:5.3.4]
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.4.jar!/:5.3.4]
            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.4.jar!/:5.3.4]
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:887) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1684) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
            at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
            at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.43.jar!/:9.0.43]
            at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]

    Ça donne l'impression que lorsque le répertoire est un lien symbolique, l'application java ne sait pas écrire dedans.

    bien sur malgré la trace "FileAlreadyExistsException", j'ai bien vérifié que mon répertoire était vide avant d'executer l'application java.

    De plus si je créé un fichier dans le répertoire symbolique moi même "touch titi.txt" , le fichier est correctement créé.

  6. #6
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 271
    Points : 13 536
    Points
    13 536
    Par défaut


    C'est écrit en toutes lettres à 2 endroits :
    FileAlreadyExistsException
    (...)
    java.nio.file.FileAlreadyExistsException:
    "File already exists", C'est de l'anglais. Cela veut dire que le fichier existe déjà. Et cela n'est pas surprenant. Lorsque tu écris ln -s /var/sftp/OUT /home/toto/SORTIE, tu demandes de créer un lien symbolique SORTIE dans le dossier /home/toto. Or, juste avant, lorsque tu as écrit mkdir /home/toto/SORTIE, tu as demandé de créer un dossier SORTIE dans le répertoire /home/toto. Il ne peut pas y avoir un dossier SORTIE et un fichier SORTIE dans le même répertoire /home/toto.

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 933
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 933
    Points : 15 381
    Points
    15 381
    Par défaut
    Citation Envoyé par Flodelarab Voir le message


    C'est écrit en toutes lettres à 2 endroits :

    "File already exists", C'est de l'anglais. Cela veut dire que le fichier existe déjà. Et cela n'est pas surprenant. Lorsque tu écris ln -s /var/sftp/OUT /home/toto/SORTIE, tu demandes de créer un lien symbolique SORTIE dans le dossier /home/toto. Or, juste avant, lorsque tu as écrit mkdir /home/toto/SORTIE, tu as demandé de créer un dossier SORTIE dans le répertoire /home/toto. Il ne peut pas y avoir un dossier SORTIE et un fichier SORTIE dans le même répertoire /home/toto.
    Oui, j'avais vu ça aussi.
    Sauf que ce n'est pas ça que remonte java ! "toto" n'est pas présent dans les erreurs (je les raccourcis pour que ça soit bien visible) :
    Citation Envoyé par yaume91 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [nio-8080-exec-5]Failed to complete request: java.nio.file.FileAlreadyExistsException: /home/SORTIE
     
    java.nio.file.FileAlreadyExistsException: /home/SORTIE

  8. #8
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Points : 48
    Points
    48
    Par défaut
    Bonsoir,

    J'ai dut faire une erreur de manip en copiant le log d'erreur, l'erreur java est plutôt celle là (avec "toto" dans le chemin)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [nio-8080-exec-5]Failed to complete request: java.nio.file.FileAlreadyExistsException: /home/toto/SORTIE
     
    java.nio.file.FileAlreadyExistsException: /home/toto/SORTIE
    comme je disais lorsque je ne fais pas le lien symbolique, l'application java écrit bien dans le répertoire /home/toto/SORTIE (d'ailleurs le nom de du fichier qui est écrit est du genre ocxXXX.xml)

    Par contre dés que je créé le lien symbolique, l'erreur survient.

    Du reste j'ai trouvé une solution de contournement en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mount -bind /var/sftp/OUT /home/toto/SORTIE

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DW8] Liens internes ne fonctionnent pas
    Par lapoisse dans le forum Dreamweaver
    Réponses: 3
    Dernier message: 18/06/2007, 08h59
  2. Lien qui ne fonctionne pas
    Par goldenboy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 05/01/2007, 11h28
  3. Lien qui ne fonctionne pas
    Par jean23 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 21/12/2006, 20h30
  4. Réponses: 3
    Dernier message: 08/12/2006, 16h22
  5. [Firefox Vs IE] Liens locaux ne fonctionnent pas
    Par SkyDev dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 07/11/2006, 13h36

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