Pourquoi suis-je un “échec de connexion au serveur” message de tmux quand j'ai essayer de lister les sessions?
Voici ce qui se passe pour moi: je commence tmux sessions à l'aide de tmux -L name1
, tmux -L name2
; puis je abîmer eux à l'aide de ctrl+B+d. Puis-je essayer d'obtenir une liste des sessions en cours d'exécution sur mon ordinateur. Cependant, lorsque je lance tmux ls
, je reçois un message d'erreur:
failed to connect to server: Connection refused
Est-ce un bug? Je suis familier avec écran; je considère screen -ls
comme une fonction très utile puisque je peut démarrer une session et de le laisser tourner pendant des semaines avant que la prochaine fois que j'y attache. De ce fait, la possibilité de s'inscrire en cours d'exécution dans tmux séances est assez important pour moi. Pourquoi ne tmux ls
retour d'une "connexion refusée" erreur quand je sais tmux est en cours d'exécution?
Vous devez vous connecter pour publier un commentaire.
Essayer
tmux -L name1 list-session
.name1
session et pasname2
. Voir ma réponse pour une liste de plusieurs sessions.tmux -L list-session
comme par magie, ont travaillé - maintenant, je veux creuser moi-même de savoir pourquoi, pourquoi ne pas l'ancien, comment, etc. Donc, fondamentalement, je dois répondre à l'OP de question pour moi-même).tmux -L list-session
est de DÉMARRER UN NOUVEAU instance de tmux, avec une prise nommélist-session
. C'est tout à fait trompeur, car la commande se lit comme suit: "l'utilisation de combinaisons de liste les séances avec le drapeau de L ensemble". Vous devez supprimer ce commentaire (puisque vous ne pouvez pas modifier plus), compte tenu de la nocivité, il est.tmux -L list-session
, en effet, il en commencer un nouveau exemple, et non session. merci pour votre commentaire.TL;DR: Essayer d'envoyer
SIGUSR1
signal à la tmux processus de serveur.Dans mon cas, après 8 jours d'inactivité, je n'étais pas en mesure de rattacher:
Cependant, un grep pour tmux processus m'a fait cette sortie:
Comme suggéré par @7heo.les savoirs traditionnels, ce qui indique que tmux serveur est toujours en cours, mais
tmux ls
donnaitfailed to connect to server: Connection refused
erreur. J'ai vérifié que le répertoire tmp qui appartenait à la session tmux existé etlsof -p 7139
(le pid de tmux serveur) ont montré que le fichier de socket est ouvert:J'ai aussi essayé de spécifier explicitement l'
-S /tmp/tmux-50440/default
à tmux, mais il n'a pas aidé. Cependant, j'ai lu dans le tmux homme page que l'envoi deSIGUSR1
ferait tmux recréer le fichier de socket, donc j'ai essayé et j'ai été en mesure de trouver immédiatement la session et reconnectez:rm -rf tmp/*
qui a retiré le tmux fichier de socket. Je vais certainement oublier ce truc.Ce qui m'arrive quand je n'ai pas toutes les sessions en cours d'exécution. Je viens juste de commencer à utiliser tmux et je ne savais pas que si vous redémarrez votre ordinateur, vous perdez vos sessions qui m'a surpris au premier abord.
Pour ceux d'entre vous qui pensent la même chose: Restaurer la session tmux après le redémarrage. Un résumé du poste: Utiliser des scripts shell pour construire votre tmux de sessions ou de créer une fantaisie l'historique du shell tracker.
Ce qui m'est arrivé lorsque le bureau Ubuntu s'est écrasé et mon gnome-terminal windows quitté. Je pouvais encore voir les tmux processus était en cours d'exécution (
ps aux | grep tmux
) mais pour une raison quelconque tmux des commandes ne fonctionnerait pas à la liste des sessions existantes. Apparemment, il n'était pas de trouver l'existant socket Unix de encore de combinaisons de processus. Le correctif dans ce scénario est de localiser l'existant socket Unix et de préciser qu'à tmux à l'aide de la-S
drapeau; voici comment:Vous pouvez trouver le PID de votre encore de combinaisons de processus avec cette:
Maintenant, prenez votre PID (dans mon cas, 6876) et de le lancer pour la liste de tous les sockets Unix:
Nous l'espérons vous voir un résultat comme ceci:
Maintenant, vous pouvez spécifier que les existants socket Unix pour votre tmux de commande (à l'aide de la
-S
drapeau), et vous devriez être en mesure de faire la liste des sessions et fixez correctement:Vous obtenez cette erreur, en effet si il n'y a pas de session ouverte. Si il n'y a pas des sessions ouvertes il n'y a pas de tmux serveur qui exécute donc il ne peut pas s'y connecter.
Avec le
-L
option, vous pouvez changer le socket nom de la tmux serveur utilise, ce n'est pas une façon de nommer vos sessions. Vous feriez mieux d'utiliser les commandes suivantes:Ces permettra de créer 2 sessions sur un serveur avec la valeur par défaut socket nom. Maintenant vous pouvez le faire:
Et vous voyez toutes les sessions en cours d'exécution sur le serveur sur le socket par défaut. Vous pouvez vous rattacher à l'un d'entre eux à l'aide de:
-s
spécifie le nom de la session-d
va se détacher de son client précédent (si elle est connectée)Vous pouvez également basculer entre les sessions à l'intérieur de tmux avec le
choose-tree
de commande qui par défaut est affecté à la toucheC-s
(préfixe de la clé + s). C'est ce que je fais d'habitude.Vous pouvez avoir une erreur dans votre
.tmux.conf
. J'ai eu ce problème jusqu'à ce que j'ai pris cette ligne de mon.tmux.conf
:Vous pouvez également essayer de
tmux -v
et puis regarder les journaux imprimés.Une solution facile consiste à supprimer les fichiers tmp gauche par le tmux serveur, par exemple, en faisant
$ rm -rf /tmp/tmux-xxx/
.tmux new -s $session_name
et c'est tout.J'ai été en utilisant un autre programme à l'intérieur de tmux (à rattacher à l'utilisateur de l'espace de noms), et j'avais cette erreur lorsque j'ai changé d'ordinateur car les rattacher à l'utilisateur de l'espace de noms n'a pas été installé. Le correctif a été tout simplement exécuter
brew install reattach-to-user-namespace
.La façon
TMUX(1)
œuvres, c'est d'avoir un processus client (tmux
) se connecter à un serveur de processus (tmux
trop, mais pas attaché à un TTY), comme illustré ci-dessousps
de sortie:Qui montre que le client commence en fait avant que le serveur (on peut supposer qu'il les fourches c').
Après détacher/re-joindre, le même
ps
les sorties de commande:Cela montre la tmux client
tmux attach
, ainsi, être un peu plus facile à comprendre.Maintenant, si nous chercher à la sortie de
pstree
dans les deux cas ci-dessus, on obtient dans les deux cas (en ignorant lespid
changement pourtmux attach
):Montrant clairement que les commandes tapées (
pstree
dans ce cas) dans le client de processus (PID19229
) exécuté par le serveur d'un (PID19231
), leur permettant ainsi de continuer sans SIGHUP dans le cas où le terminal client est perdu (via ssh par exemple).Maintenant, à la question de l'OP demande ce qui se passe dans le cas où
tmux
retournefailed to connect to server: Connection refused
est que le serveur de processus (pid 19231 dans notre cas) est inaccessible, quelle que soit la raison (peut-être parce que le processus serveur est mort; mais aussi parce que l'utilisateur qui exécute letmux
client n'a pas les autorisations pour accéder à la tmux socket, etc.)La solution dans ce cas est de
grep
pour latmux
processus (viaps
par exemple), et priez afin que vous n'obtenez pas cette erreur car le serveur est mort (de sorte que vous pouvez attacher à elle à l'aide delsof
pour obtenir ce sockets il écoute). Sinon, il n'y a aucun moyen de joindre pour le serveur, car il est aussi mort que après un redémarrage.TL;DR:
Cette erreur peut être donné pour des raisons multiples, allant de bug à un échec critique (programme de mort). En un mot, utiliser les outils UNIX à votre disposition pour déterminer quel socket n'
tmux
utilisation, si elle est toujours en cours (il devrait y avoir au moins deux processus si vous avez la tmux client en cours d'exécution - qui se passe après l'invocationtmux
outmux attach
de la coquille) et donc si vous avez perdu votre session ou pas.Remarque: comme d'autres réponses souligné, si la raison de cette erreur pour être montré, c'est une erreur de socket, vous pouvez utiliser le
-L
drapeau à diretmux
d'utiliser un socket spécifique.Cela peut se produire si vous ou l'un processus de nettoyage de supprimer des fichiers dans
/tmp/*
. Toutes vos sessions de perte de données si vous ne pouvez pas récupérer ces fichiers. Tuer toutes les combinaisons de cas et de redémarrer c'est le seul choix qui reste, malheureusement.