{"record":{"id":"9bf0b26843e577e3","repo":"shadowsocks/shadowsocks-rust","slug":"all-plugins-are-exited-all-connections-may-fail","errorCode":null,"errorMessage":"all plugins are exited. all connections may fail, check your configuration","messagePattern":"all plugins are exited\\. all connections may fail, check your configuration","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"crates/shadowsocks-service/src/local/loadbalancing/ping_balancer.rs","lineNumber":297,"sourceCode":"\n                    for plugin in plugins {\n                        vfut.push(async move {\n                            match plugin.join().await {\n                                Ok(status) => {\n                                    error!(\"plugin exited with status: {}\", status);\n                                    Ok(())\n                                }\n                                Err(err) => {\n                                    error!(\"plugin exited with error: {}\", err);\n                                    Err(err)\n                                }\n                            }\n                        });\n                    }\n\n                    let _ = future::join_all(vfut).await;\n\n                    panic!(\"all plugins are exited. all connections may fail, check your configuration\");\n                });\n\n                Some(plugin_abortable)\n            }\n        };\n\n        let (best_tcp_idx, best_udp_idx) = PingBalancerBuilder::find_best_idx(&servers, mode);\n\n        let balancer_context = Self {\n            servers,\n            best_tcp_idx: AtomicUsize::new(best_tcp_idx),\n            best_udp_idx: AtomicUsize::new(best_udp_idx),\n            context,\n            mode,\n            max_server_rtt,\n            check_interval,\n            check_best_interval,\n            best_task_notify: Notify::new(),","sourceCodeStart":279,"sourceCodeEnd":315,"githubUrl":"https://github.com/shadowsocks/shadowsocks-rust/blob/8eb0f0a65b1d976ab6bed5787327ef86529b0435/crates/shadowsocks-service/src/local/loadbalancing/ping_balancer.rs#L279-L315","documentation":"The load-balancer's plugin supervisor task panics when every external plugin process (e.g. v2ray-plugin, simple-obfs) it spawned has exited. Once no plugin process is alive, all proxied connections will fail, so the balancer aborts loudly instead of failing silently. It indicates the plugin binary keeps dying, usually because of a bad plugin configuration or missing binary.","triggerScenarios":"Panic in `LocalBuilder::new` when building a load-balancing local server with plugin instances: all spawned plugin child processes terminated (plugin_abortable futures all finished) before the balancer can route traffic.","commonSituations":"Wrong plugin binary path in config so the process exits immediately; invalid plugin options passed to the plugin (e.g. bad TLS args); plugin crashes on startup due to missing libraries or incompatible config; server address/port rejected by the plugin.","solutions":["Fix the plugin binary path and verify it runs standalone with the configured args","Correct the `--plugin-opts` value against the plugin's documentation","Check plugin stderr logs in the terminal to see why it exits","Remove the plugin entry if it is not needed, or pin a working plugin version"],"exampleFix":"// before\n{\"local_address\":\"127.0.0.1\",\"local_port\":1080,\"server\":\"ss.example.com\",\"plugin\":\"obfs-local\",\"plugin_opts\":\"obfs=http;obfs-host=wrong-host\"}\n// after\n{\"local_address\":\"127.0.0.1\",\"local_port\":1080,\"server\":\"ss.example.com\",\"plugin\":\"obfs-local\",\"plugin_opts\":\"obfs=http;obfs-host=real.example.com\"}","handlingStrategy":"validation","validationCode":"// before building the balancer, verify the plugin runs:\nCommand::new(plugin_binary).args(parse_plugin_opts(opts)).status()?.exit_ok()?;","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Test the plugin binary standalone with the exact same args before wiring it in","Keep absolute paths for plugin binaries in config","Monitor plugin stderr output at startup","Pin plugin versions and retest after upgrades"],"tags":["panic","plugin","process-management","configuration"],"backgroundTag":"invalid-config-value","analyzedSha":"8eb0f0a65b1d976ab6bed5787327ef86529b0435","analyzedAt":"2026-09-09T12:20:43.168Z","contentChangedAt":"2026-09-09T12:20:43.168Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}