Les liens symboliques

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Les liens symboliques

user0
  Bonsoir à tous, me revoilà avec plein de question à la recherche de
grands maîtres pouvant m'éclairer.

(Suite à la discussion du serveur mysql avec laquelle je vous ai ennuyé)

voici mon rc.local :

if [ -x /usr/local/bin/mysqld_safe ] ; then
         su -c _mysql root -c '/usr/local/bin/mysqld_safe >/dev/null 2>&1 &'
         sleep 10
         ln -f /var/run/mysql/mysql.sock /var/www/var/run/mysql/mysql.sock
         echo -n ' mysql'
fi

J'ai remarqué qu'au redémarrage mysql.sock et le dossier qui le contient
n'existe pas, et se créer après avoir lancé le serveur mysql.

En enlevant le "sleep 10" ça ne fonctionne pas, mais quand je check
/var/www/var/run/mysql

mysql.sock est bien présent, j'en déduis que le lien symbolique a tout
de même été fait (ou a gardé le lien d'avant le redémarrage) ... (alors
que mysql.sock n'était encore créé à ce moment la)

Dois-je en déduire que ce lien symbolique pointe dans le vide ?

Je me pose toujours les questions suivantes : pourquoi devoir recréer le
lien symbolique ?

Un lien symbolique est-il détruit au redémarrage de la machine ?

si je créer un lien symbolique sur "fichier.txt", que je détruit
"fichier.txt", et que je recréer un fichier du même non, le lien
pointera t-il vers le nouveau fichier? Ou si je créer un lien symbolique
sur "fichier.txt" qui n'existe pas (est-ce possible?), et que je crée
"fichier.txt" ensuite, le lien fonctionnera t-il ?

Merci d'avance.

------------------
CHKOURINE Evgueni


________________________________
French OpenBSD mailing list
[hidden email]
http://www.openbsd-france.org/communaute.php

Reply | Threaded
Open this post in threaded view
|

Re: Les liens symboliques

Hugo Villeneuve-2
On Thu, Oct 14, 2010 at 01:56:43AM +0200, Evgueni CHKOURINE wrote:

>  Bonsoir à tous, me revoilà avec plein de question à la recherche de
> grands maîtres pouvant m'éclairer.
>
> (Suite à la discussion du serveur mysql avec laquelle je vous ai ennuyé)
>
> voici mon rc.local :
>
> if [ -x /usr/local/bin/mysqld_safe ] ; then
>         su -c _mysql root -c '/usr/local/bin/mysqld_safe >/dev/null 2>&1 &'
>         sleep 10
>         ln -f /var/run/mysql/mysql.sock /var/www/var/run/mysql/mysql.sock
>         echo -n ' mysql'
> fi
>
> J'ai remarqué qu'au redémarrage mysql.sock et le dossier qui le contient
> n'existe pas, et se créer après avoir lancé le serveur mysql.

/var/run/* est effacé par /etc/rc au démarrage.

/var/run/mysqld est créé par mysqld_safe.

>
> En enlevant le "sleep 10" ça ne fonctionne pas, mais quand je check
> /var/www/var/run/mysql

Comme vous faites un lien hard et pas symbolique, /var/run/mysql/mysql.sock
a besoin d'exister pour que la commande fonctionne. Le "sleep" est
nécessaire pour donner le temps à mysqld de démarrer.

>
> mysql.sock est bien présent, j'en déduis que le lien symbolique a tout
> de même été fait (ou a gardé le lien d'avant le redémarrage) ... (alors
> que mysql.sock n'était encore créé à ce moment la)
>
> Dois-je en déduire que ce lien symbolique pointe dans le vide ?
>
> Je me pose toujours les questions suivantes : pourquoi devoir recréer le
> lien symbolique ?

Votre lien n'est pas symbolique. Vous n'avez pas utilisé l'option
"-s". Il est de type "hard".

>
> Un lien symbolique est-il détruit au redémarrage de la machine ?

Le problème est que mysql.sock est un fichier de type socket unix.
Ils n'utilisent pas les même conventions que les autres types de
fichiers.

Il est impossible de réouvrir un socket unix en mode serveur (mysqld)
sans l'effacer auparavant. C'est cette destruction obligatoire qui
rend l'utilisation de liens hard avec un fichier socket problématique.

Mon opinion est qu'il est possible de faire fonctionner votre méthode
mais qu'un jour ou l'autre, ça va vous sauter à la face.


La solution que j'ai utilisé quand je me suis trouvé dans le même
cas que vous, a été de changer la configuration de mysql pour qu'il
utilise un socket sous /var/www/var/run (qui doit être créé
manuellement).

Mon /etc/my.cnf contient (entre autre):

[client]
socket = /var/www/var/run/mysql/mysql.sock

[mysqld]
socket = /var/www/var/run/mysql/mysql.sock


>
> si je créer un lien symbolique sur "fichier.txt", que je détruit
> "fichier.txt", et que je recréer un fichier du même non, le lien
> pointera t-il vers le nouveau fichier?

Oui. Un lien symbolique est évalué lors de son utilisation.
Un lien hard est évalué lors de sa création uniquement.

> Ou si je créer un lien symbolique
> sur "fichier.txt" qui n'existe pas (est-ce possible?), et que je crée
> "fichier.txt" ensuite, le lien fonctionnera t-il ?

Oui. Il est possible de créer des liens symboliques sans que la
destination existe. En fait il est possible d'encoder de l'information
utile d'accès très rapide dans le contenu du lien symbolique comme
/etc/malloc.conf(5) le fait.

Et oui, ça va fonctionner pour un lien symbolique. Pas pour un lien hard.

>
> Merci d'avance.
>
> ------------------
> CHKOURINE Evgueni

________________________________
French OpenBSD mailing list
[hidden email]
http://www.openbsd-france.org/communaute.php

Reply | Threaded
Open this post in threaded view
|

Re: Les liens symboliques

user0
  Très instructif merci encore :)

Le 14/10/10 04:04, Hugo Villeneuve a écrit :

> On Thu, Oct 14, 2010 at 01:56:43AM +0200, Evgueni CHKOURINE wrote:
>>   Bonsoir à tous, me revoilà avec plein de question à la recherche de
>> grands maîtres pouvant m'éclairer.
>>
>> (Suite à la discussion du serveur mysql avec laquelle je vous ai ennuyé)
>>
>> voici mon rc.local :
>>
>> if [ -x /usr/local/bin/mysqld_safe ] ; then
>>          su -c _mysql root -c '/usr/local/bin/mysqld_safe>/dev/null 2>&1&'
>>          sleep 10
>>          ln -f /var/run/mysql/mysql.sock /var/www/var/run/mysql/mysql.sock
>>          echo -n ' mysql'
>> fi
>>
>> J'ai remarqué qu'au redémarrage mysql.sock et le dossier qui le contient
>> n'existe pas, et se créer après avoir lancé le serveur mysql.
> /var/run/* est effacé par /etc/rc au démarrage.
>
> /var/run/mysqld est créé par mysqld_safe.
>
>> En enlevant le "sleep 10" ça ne fonctionne pas, mais quand je check
>> /var/www/var/run/mysql
> Comme vous faites un lien hard et pas symbolique, /var/run/mysql/mysql.sock
> a besoin d'exister pour que la commande fonctionne. Le "sleep" est
> nécessaire pour donner le temps à mysqld de démarrer.
>
>> mysql.sock est bien présent, j'en déduis que le lien symbolique a tout
>> de même été fait (ou a gardé le lien d'avant le redémarrage) ... (alors
>> que mysql.sock n'était encore créé à ce moment la)
>>
>> Dois-je en déduire que ce lien symbolique pointe dans le vide ?
>>
>> Je me pose toujours les questions suivantes : pourquoi devoir recréer le
>> lien symbolique ?
> Votre lien n'est pas symbolique. Vous n'avez pas utilisé l'option
> "-s". Il est de type "hard".
>
>> Un lien symbolique est-il détruit au redémarrage de la machine ?
> Le problème est que mysql.sock est un fichier de type socket unix.
> Ils n'utilisent pas les même conventions que les autres types de
> fichiers.
>
> Il est impossible de réouvrir un socket unix en mode serveur (mysqld)
> sans l'effacer auparavant. C'est cette destruction obligatoire qui
> rend l'utilisation de liens hard avec un fichier socket problématique.
>
> Mon opinion est qu'il est possible de faire fonctionner votre méthode
> mais qu'un jour ou l'autre, ça va vous sauter à la face.
>
>
> La solution que j'ai utilisé quand je me suis trouvé dans le même
> cas que vous, a été de changer la configuration de mysql pour qu'il
> utilise un socket sous /var/www/var/run (qui doit être créé
> manuellement).
>
> Mon /etc/my.cnf contient (entre autre):
>
> [client]
> socket = /var/www/var/run/mysql/mysql.sock
>
> [mysqld]
> socket = /var/www/var/run/mysql/mysql.sock
>
>
>> si je créer un lien symbolique sur "fichier.txt", que je détruit
>> "fichier.txt", et que je recréer un fichier du même non, le lien
>> pointera t-il vers le nouveau fichier?
> Oui. Un lien symbolique est évalué lors de son utilisation.
> Un lien hard est évalué lors de sa création uniquement.
>
>> Ou si je créer un lien symbolique
>> sur "fichier.txt" qui n'existe pas (est-ce possible?), et que je crée
>> "fichier.txt" ensuite, le lien fonctionnera t-il ?
> Oui. Il est possible de créer des liens symboliques sans que la
> destination existe. En fait il est possible d'encoder de l'information
> utile d'accès très rapide dans le contenu du lien symbolique comme
> /etc/malloc.conf(5) le fait.
>
> Et oui, ça va fonctionner pour un lien symbolique. Pas pour un lien hard.
>
>> Merci d'avance.
>>
>> ------------------
>> CHKOURINE Evgueni
> ________________________________
> French OpenBSD mailing list
> [hidden email]
> http://www.openbsd-france.org/communaute.php
>


________________________________
French OpenBSD mailing list
[hidden email]
http://www.openbsd-france.org/communaute.php