2017-09-05 1 views

Répondre

1

Par défaut, tout ce que vous exécutez à partir du shell distant aura son chef de groupe défini sur le chef de groupe du shell, ainsi les E/S fonctionneront comme prévu.

Pour les processus qui ont été démarrés à partir du noeud principal, leur chef de groupe est déjà défini, de sorte que leurs E/S ne seront pas redirigées vers le shell distant. Vous pouvez définir le chef de groupe d'un processus avec Process.group_leader/2, par exemple: Process.group_leader(pid, Process.group_leader()) qui définira le leader du groupe pid sur le chef de groupe du processus en cours. Vous pouvez configurer le backend :console pour que Logger redirige également vers votre shell avec Logger.configure_backend(:console, [device: Process.group_leader()]). Après cela, toute la sortie Logger de console doit être dirigée vers votre shell distant.

Faites très attention à ce sujet. Si vous faites cela sur une application qui produira beaucoup de sortie, vous courez le risque de surcharger le chef de groupe, ce qui peut le bloquer, et donc tout ce qui tente d'y écrire - et la probabilité de le faire augmente lorsque vous êtes affecter un chef de groupe sur un noeud distant. Je suggère de ne jamais le faire lors de l'expérimentation ou peut-être au cours du développement. En production, vous devriez probablement écrire des logs dans des fichiers, et il est beaucoup plus sûr d'écraser passivement ces logs via ssh que de changer le leader du logger sur votre shell distant - en particulier si vous tuez votre shell sans changer de leader arrière; cela provoquera l'écrasement de tout processus essayant d'écrire au chef de groupe. Vous devez également faire attention à stocker le chef de groupe du processus avant de le modifier afin de pouvoir le remplacer par le bon.

+0

Ah, il y a d'excellentes notes à la fin auxquelles je n'avais pas pensé. –