07/Documentation
Dépannage d'un agent durable
Un agent durable qui n'apparaît pas ou affiche Unreachable : les premières vérifications, chaque cause et sa solution, les lignes du doctor et les cas fréquents
Expérimental. Le protocole réseau, le SDK et cette page peuvent changer, ou la fonctionnalité peut être retirée, dans une version mineure ultérieure. Agents durables indique ce qui détermine son maintien.
Un agent durable qui n'apparaît pas, affiche Unreachable ou ne répond pas à un appui : trois commandes identifient la cause, et un tableau des motifs ainsi qu'une liste de cas fournissent la solution. Dépannage couvre Collie dans son ensemble.
Premières vérifications
Exécutez ces trois commandes, dans cet ordre :
collie durable list
collie doctor
collie logs| commande | ce qu'elle affiche pour un agent durable |
|---|---|
collie durable list | Une ligne par entrée de sources.json, avec l'état que lui attribue le bridge en cours d'exécution : loaded, not loaded (restart to apply), refused (<status>) ou bridge not answering. loaded signifie que le bridge a chargé l'entrée. Cela ne signifie pas que l'agent durable répond. Un état not loaded s'affiche aussi quand le bridge répond HTTP 400 pour ce nom |
collie doctor | Interroge l'agent durable lui-même. La commande affiche les lignes de Lignes du doctor pour les agents durables et indique la vérification en échec avec une solution |
collie logs | La ligne de démarrage de chaque agent durable, [bridge] program "desk": durable, private socket /run/user/1000/desk/app.sock, ainsi que son motif lorsqu'un paramètre enfreint une règle. Un mauvais sources.json affiche [bridge] FATAL:. Une lecture en échec affiche [state] poll failed, marking disconnected: <reason> une fois par panne. Les lignes qui commencent par [durable] indiquent un refus de version, un lead obsolète, des éléments ignorés et un journal supprimé |
Le téléphone affiche moins de détails. La ligne d'un agent durable indique Starting ou Unreachable sans fournir de motif. Un refus de version du protocole utilise son propre libellé, Version mismatch, ainsi qu'un encadré d'avertissement sur l'accueil de l'agent durable. Un jeton refusé utilise ses propres termes dans la barre de connexion. collie doctor et collie logs indiquent tous les autres motifs.
La table des motifs
Quand Collie ne peut pas joindre un agent durable, le reste de Collie démarre quand même, et l'agent durable apparaît comme inaccessible avec un motif.
Un motif indique la variable d'environnement même lorsque l'agent durable est une entrée de sources.json. Lisez COLLIE_DURABLE_SOCKET comme socket de l'entrée, COLLIE_DURABLE_URL comme son url et COLLIE_DURABLE_TOKEN comme son token. La correction pour une entrée se trouve dans sources.json. La correction pour la forme réservée aux agents durables se trouve dans .env, puis collie restart.
Le paramètre enfreint une règle
Collie les signale sans contacter l'agent durable. Les règles définies dans les entrées de sources.json sont également refusées au démarrage du bridge (Une faute de frappe dans sources.json).
| motif | ce que cela signifie et la correction |
|---|---|
COLLIE_DURABLE_SOCKET is not set | La forme réservée aux agents durables n'a pas de chemin de socket. Définissez-le, ou définissez l'URL avec son token |
COLLIE_DURABLE_SOCKET must be an absolute path | Indiquez le chemin complet, commençant par / |
COLLIE_DURABLE_SOCKET is longer than 103 bytes | Raccourcissez le chemin. Gardez-le sous $XDG_RUNTIME_DIR |
the private socket transport is not available on Windows; set COLLIE_DURABLE_URL and COLLIE_DURABLE_TOKEN instead | Windows n'a pas de transport par socket. Utilisez une URL et un token |
COLLIE_DURABLE_SOCKET and COLLIE_DURABLE_URL are both set; set the socket, or the URL with its token, not both | La forme réservée aux agents durables a reçu les deux. Ne conservez qu'un seul transport |
COLLIE_DURABLE_URL is set without COLLIE_DURABLE_TOKEN; the durable agent refuses a caller with no token | La forme réservée aux agents durables a reçu une URL et aucun token. Définissez le token |
COLLIE_DURABLE_TOKEN is set without COLLIE_DURABLE_URL; a token is only sent to a URL | La forme réservée aux agents durables a reçu un token et aucune URL. Définissez l'URL, ou supprimez le token |
COLLIE_DURABLE_URL is longer than 2048 bytes | Raccourcissez l'URL pour ne garder que l'adresse de base de l'agent durable |
COLLIE_DURABLE_URL is not a URL | Écrivez-le sous la forme https://host |
COLLIE_DURABLE_URL must start with https:// | Tout schéma autre que https:// est refusé. Un simple http:// a sa propre ligne ci-dessous |
COLLIE_DURABLE_URL uses plain http to <host>, so the token would cross the network unencrypted; use https://, or http://127.0.0.1:<port> for wrangler dev | Utilisez https://. Le protocole http simple est réservé à 127.0.0.1 ou localhost avec un port |
COLLIE_DURABLE_URL uses plain http on loopback without a port; name the port, for example http://127.0.0.1:8801 | Ajoutez le port |
COLLIE_DURABLE_URL must not carry a user name or password; the token goes in COLLIE_DURABLE_TOKEN | Retirez le nom d'utilisateur et le mot de passe de l'URL |
COLLIE_DURABLE_URL must not carry a query or a fragment | Retirez la partie ? et la partie # de l'URL |
COLLIE_DURABLE_URL names the durable agent's base only; leave out /session/v1, the adapter adds it | Supprimez /session/v1 du chemin |
COLLIE_DURABLE_TOKEN is <n> bytes; it must be at least 32 bytes, for example 64 hex characters from openssl rand -hex 32 | Générez un token plus long, et fournissez le même à l'agent durable |
COLLIE_DURABLE_TOKEN must be printable ASCII with no spaces | Supprimez les espaces et autres caractères du token |
COLLIE_DURABLE_TOKEN is longer than 4096 bytes | Un en-tête aussi long est une erreur. Utilisez un token plus court |
L'agent durable ne répond pas, ou répond de manière incorrecte
| motif | ce que cela signifie et la correction |
|---|---|
no socket at <path> | Il n'y a encore rien sur ce chemin. Démarrez l'agent durable, ou corrigez le chemin |
cannot check <path>: <message> | Collie n'a pas pu lire le chemin. Rendez-le accessible en lecture pour votre utilisateur |
socket-not-private: <check> | Le parcours du chemin a échoué, et le texte après les deux-points nomme l'élément concerné. Le contrôle de confidentialité échoue répertorie les cas habituels |
connection refused | Rien n'écoute. Un agent durable qui a planté peut laisser son fichier socket derrière lui : Un fichier socket orphelin. En HTTPS, rien n'écoute à l'URL |
no answer within <n>ms | L'agent durable est bloqué ou froid. Collie attend 1000 ms sur un socket et 5000 ms en HTTPS |
tls refused: <message> | Le certificat de l'URL est refusé. Collie ne dispose d'aucune option pour ignorer cette vérification |
the host name does not resolve | Le nom d'hôte dans l'URL est incorrect, ou votre réseau ne peut pas l'atteindre |
token-refused: the durable agent answered 401 ou 403 | L'agent durable a refusé le jeton. L'agent durable a refusé le jeton |
too-large | L'agent durable a répondu avec plus de données que Collie n'en lit : 16 Kio pour hello, 4 Mio pour un instantané. Réduisez la taille de sa réponse |
incompatible: the durable agent speaks 2..3, this Collie speaks 1..1 | Les plages de versions ne correspondent pas. Mettez à jour le composant le plus ancien. collie doctor affiche les deux plages et le journal reçoit une ligne par plage |
incompatible: not a durable agent | Quelque chose d'autre répond à ce chemin ou à cette URL. Pointez l'entrée vers l'agent durable |
incompatible: the durable agent asks for a token | Un agent durable sur un socket exige un jeton, ce qu'un socket ne transporte jamais. Mettez à jour le composant le plus ancien, ou joignez-le par URL avec un jeton |
unreadable hello: <detail> ou unreadable snapshot: <detail> | L'agent durable a envoyé un document non autorisé par le protocole réseau. Consultez le journal propre à l'agent durable |
the durable agent answered <status> ou the durable agent answered 409 <code> | L'agent durable a répondu avec un statut que le protocole réseau n'utilise pas ici. Consultez le journal propre à l'agent durable |
starting | L'agent durable est actif et indique qu'il n'est pas prêt, ou répond 503. Collie réessaiera lors de la prochaine interrogation |
Lignes du doctor pour les agents durables
collie doctor pose à chaque agent durable les mêmes questions que le pont, dans l'ordre où le pont les pose. Il n'envoie rien d'autre que hello.
Chaque entrée de sources.json reçoit un bloc de six lignes, noté durable-socket:desk pour un agent durable nommé desk. Une ligne sources avant les blocs vérifie le fichier, et une ligne durable-lead les suit. Un Collie fonctionnant uniquement en agent durable affiche les six mêmes lignes sans suffixe, et sa ligne mux indique durable, see the durable-* lines.
| ligne | vert | avertissement ou rouge |
|---|---|---|
sources | 2 durable agents in <path>, mode 0600 | Rouge lorsque le fichier ne peut pas être analysé. Sa solution indique que le pont ne démarre pas tant qu'il contient des erreurs. Rouge lorsque le groupe ou d'autres utilisateurs peuvent lire le fichier, avec chmod 600 comme solution, car une entrée peut contenir un jeton |
durable-env | transport: private socket avec le chemin, ou transport: https with a bearer token | Rouge lorsque le paramètre enfreint une règle de le tableau des motifs |
durable-socket | Le chemin est un socket, le vôtre, mode 0600, dans un de vos dossiers en mode 0700, sans lien sur le chemin | Rouge, et la ligne indique la vérification qui a échoué : introuvable, illisible, pas un socket, un lien symbolique, pas un dossier, dossier appartenant à un autre utilisateur, dossier avec un mode incorrect, dossier parent accessible en écriture par d'autres, socket appartenant à un autre utilisateur, ou socket avec un mode trop ouvert. Ignoré pour un agent durable derrière HTTPS |
durable-url | L'adresse, https ou HTTP loopback, et sa longueur en octets | Rouge lorsque l'URL enfreint une règle. Ignoré sur un socket |
durable-token | set, <n> bytes. Collie n'affiche jamais la valeur | Rouge lorsque le jeton enfreint une règle. Ignoré sur un socket |
durable-hello | L'agent durable a répondu. Les deux plages, la version convenue | Rouge avec la cause : le jeton a été refusé, rien n'a répondu, quelque chose qui n'est pas un agent durable a répondu, l'agent durable demande un jeton sur un socket, un hello illisible, ou des plages qui ne se recoupent pas. Une discordance de plages affiche les deux plages |
durable-ready | ready, le nom d'hôte de l'agent durable et son epoch | Un avertissement quand l'agent durable indique qu'il n'est pas encore prêt |
durable-lead | Le lead est assez récent pour afficher la carte de question | Consultez Dans une crew |
Une ligne en échec interrompt les lignes suivantes. Elles s'affichent comme ignorées avec la raison fix the row above first, car Collie n'interroge jamais un agent durable via un socket qui échoue au contrôle de confidentialité ou avec un jeton non conforme à sa règle. Une ligne ignorée n'est pas une anomalie.
Cas
Chaque cas indique ce que vous observez, la raison et le correctif.
Une faute de frappe dans sources.json
Vous voyez Collie à l'arrêt, et pas seulement un agent durable : le téléphone ne peut pas se connecter. collie logs se termine par [bridge] FATAL:, le chemin du fichier, l'entrée et le champ.
Le bridge lit sources.json au démarrage et s'arrête sur un champ inconnu, un kind qui n'est pas durable, un nom non conforme à la règle, un nom utilisé deux fois, socket et url ensemble, aucun des deux, un url sans token, ou un token avec un socket. Corrigez le fichier, puis exécutez collie restart. collie doctor affiche le même message dans sa ligne sources.
Lorsque le bridge ne peut pas nommer l'entrée (ce n'est pas un objet, elle contient un champ inconnu ou son nom enfreint la règle), il compte à partir de 0 et écrit entry 1 pour la seconde. collie durable attach compte à partir de 1 et écrit entry 2 pour la même entrée. Les deux indiquent le champ en cause. Dès que le nom est valide, le bridge l'écrit : entry "desk".
attach et detach refusent d'écrire un fichier qu'ils ne peuvent pas lire, afin qu'une faute de frappe n'écrase pas vos autres entrées. Ils s'arrêtent avec le code de sortie 1.
Un agent durable n'apparaît pas après attach
Vous ne voyez aucun agent durable sur le téléphone, et collie durable list indique not loaded (restart to apply).
attach et detach écrivent uniquement sources.json. Le bridge le lit au démarrage. Exécutez collie restart, ou ajoutez --restart au verbe la prochaine fois. Si not loaded persiste après un redémarrage, lisez collie logs : list formule un code HTTP 400 du bridge de la même manière qu'un 404.
Le contrôle de confidentialité échoue
Vous voyez socket-not-private: the socket's folder /tmp/hello has mode 0755, not 0700, et la ligne de diagnostic durable-socket est rouge.
Collie se connecte à un socket uniquement si l'intégralité du chemin est privée. Les causes habituelles sont un dossier avec le mode 0755, un socket placé directement dans /tmp ou un autre dossier partagé, et un lien symbolique dans le chemin. Un lien symbolique passe facilement inaperçu : /var/run pointe vers /run sur de nombreux hôtes Linux, de sorte qu'un chemin débutant par /var/run/ échoue avec /var/run is a symlink. Utilisez le chemin réel.
Exécutez chmod 700 sur le dossier propre au socket, ou déplacez le socket sous $XDG_RUNTIME_DIR. Les règles figurent dans Sécurité d'un agent durable. Un agent durable compilé avec le SDK refuse de démarrer dans un dossier existant dont le mode n'est pas 0700, et le signale explicitement.
Un fichier socket orphelin
Vous voyez connection refused sur un socket, alors que le fichier est présent.
Un agent durable qui a planté laisse son fichier de socket derrière lui, et rien n'écoute dessus. Redémarrez l'agent durable. Le SDK supprime un fichier de socket inactif avant de se mettre en écoute, et s'arrête avec another instance is already listening si le socket est actif. Ne supprimez le fichier manuellement que si votre agent durable ne le nettoie pas.
Un nom identique à celui d'une session de terminal
Vous voyez le bridge s'arrêter au démarrage avec the name is the terminal session's own; pick another, ou une session de terminal manque sur le téléphone.
Un agent durable ne peut pas prendre le nom du terminal depuis lequel Collie s'exécute. Ce nom est default sur la plupart des installations, et sur un Collie configuré uniquement pour les agents durables, default est celui de son agent durable. Le bridge s'arrête au démarrage et nomme l'entrée. Une session Herdr qui porte le nom d'un agent durable constitue un autre cas : l'agent durable conserve le nom, le téléphone n'affiche pas cette session, et le journal le signale une fois. Renommez l'un des deux.
Un avertissement durable-ready qui persiste
Vous voyez durable-ready sous forme d'avertissement à chaque exécution de collie doctor.
L'agent durable répond hello et indique ready: false. Le téléphone l'affiche comme En cours de démarrage. Un agent durable n'indique qu'il est prêt qu'après avoir structuré ses conversations et réémis ses questions en suspens. Consultez le journal propre à l'agent durable pour savoir ce qu'il attend.
L'agent durable s'arrête au démarrage lors du contrôle des descendants
Vous voyez l'agent durable s'arrêter au démarrage avec the descendant check needs Bun on Linux to read the peer of a socket; pass callerCheck: "off" to run without it.
Ce contrôle nécessite Bun sous Linux. Sous macOS, exécutez l'agent durable avec Node, ou passez callerCheck: "off" à openCollie et lisez d'abord ce que le contrôle protège. L'erreur provient de l'agent durable. Collie n'est pas en cause.
Une question revient après un redémarrage
Vous revoyez une question après le redémarrage de l'agent durable, ou une carte indiquant qu'elle a déjà reçu une réponse.
Une réponse à une question posée avant le redémarrage reçoit too-late, la carte l'indique puis disparaît. Un agent durable qui dérive l'id de la question de son appel d'outil repose la même question ; la réponse envoyée pendant le redémarrage aboutit donc et l'outil s'exécute une seule fois. Un agent durable qui génère un nouvel id à chaque fois pose une nouvelle question pour le même appel d'outil. La carte l'affiche, et Collie n'envoie pas de second push, car la protection anti-push s'appuie sur la clé de l'appel d'outil. Cette protection autorise également 3 pushs par minute et par conversation, 10 par minute et par hôte, et 30 par heure et par hôte. Le push qui serait le 31e en une heure devient un push récapitulatif pour cet hôte, et l'hôte n'en envoie plus aucun pendant l'heure qui suit. Une carte est toujours affichée.
403 appelant refusé
Vous voyez le téléphone indiquer que la réponse ou le message a été refusé, avec pour motif renvoyé par l'agent durable : 403 caller-refused.
La vérification des descendants de l'agent durable a rejeté l'appelant. Elle rejette l'agent durable lui-même, tout processus lancé par l'agent durable, ainsi que tout appelant qu'elle ne peut pas distinguer de ceux-ci. Collie se retrouve du côté de l'agent durable lorsque celui-ci, ou un outil qu'il a exécuté, a démarré le processus Collie et que ce processus reste son enfant. Démarrez Collie en dehors de l'agent durable, puis réessayez.
Réessayer, et réponse susceptible d'être appliquée
Vous voyez « Réception de la réponse incertaine » avec un bouton Réessayer, puis après appui « Peut-être déjà appliquée. Vérifiez le chat. »
Un délai d'attente dépassé, une coupure de connexion ou une erreur 5xx après le départ de la réponse signifie qu'elle a pu aboutir. Réessayer renvoie le même id de requête, de sorte que l'agent durable répond replayed et ne résout jamais la question deux fois. Si la question est déjà fermée, la première tentative a pu la clore ; le téléphone indique alors de vérifier le chat. Un envoi, un arrêt et un appui sur un bouton indiquent la même chose avec leurs propres termes.
L'agent durable a refusé le jeton
Vous voyez la barre de connexion afficher « L'agent durable a refusé le jeton. Vérifiez COLLIE_DURABLE_TOKEN sur ce pair. », et la raison est token-refused.
L'agent durable a renvoyé 401 ou 403 au jeton. La cause la plus fréquente est une rotation où un côté a changé avant l'autre. Le message sur le téléphone mentionne COLLIE_DURABLE_TOKEN même pour une entrée de type sources.json : lisez-le comme le token de l'entrée. Donnez le nouveau jeton à l'agent durable avant de redémarrer Collie. Jetons détaille les étapes de rotation. Un 403 peut aussi provenir d'un proxy d'accès placé devant l'agent durable.
Un basculement vers Inaccessible qui prend deux lectures
Vous voyez un agent durable rester Prêt lors d'une première lecture en échec, puis basculer vers Inaccessible.
Une lecture échouée après une lecture réussie conserve la dernière disposition pour cette scrutation. Le deuxième échec consécutif fait basculer l'agent durable. Un jeton refusé suit la même règle. Un chemin de socket échouant au contrôle de confidentialité est la seule exception : il apparaît immédiatement.
En https, un agent durable qui ne répond pas ou refuse le jeton n'est interrogé qu'au maximum une fois toutes les 10 s, chaque essai étant une requête facturée. Sur un socket, l'intervalle minimal entre deux lectures d'un agent durable arrêté est de 250 ms.
Dans une crew
Un agent durable situé sur un membre d'une crew s'affiche sur le téléphone du lead ; le lead doit donc savoir ce qu'est un agent durable.
Un lead antérieur à la version 1.21.0 liste les conversations de l'agent durable sans la carte de question, et son onglet Terminal scrute une conversation dépourvue de terminal. Aucune action sur le membre ne résout cela. Le membre l'indique lui-même : collie doctor émet un avertissement dans durable-lead, et le journal enregistre une ligne, [durable] the lead is 1.20.1; it shows durable panes without the question card and its Terminal tab polls; update the lead, pour chaque version détectée. Mettez le lead à jour.
durable-lead | message affiché |
|---|---|
| ignoré, aucune crew | Cette machine n'appartient pas à une crew, il n'y a donc pas de lead |
| ignoré, lead | Cette machine est le lead et affiche ses propres volets |
| ignoré, aucune version | Le lead n'a indiqué aucune version : version de dev, mise à jour en cours, ou aucun appel depuis le démarrage du pont |
| avertissement | Le lead exécute une version antérieure à 1.21.0 |
| vert | Le lead est en version 1.21.0 ou ultérieure |
Un membre plus ancien que le lead présente le défaut inverse. Le téléphone affiche « Cette machine exécute une version plus ancienne de Collie et ne peut pas recevoir de réponses ici. Mettez-la à jour, ou répondez dans l'agent durable. » Mettez ce membre à jour.
Modifier cette page sur GitHub