diff --git a/tools.py b/tools.py index d98e636..59099e1 100644 --- a/tools.py +++ b/tools.py @@ -8,23 +8,35 @@ import json def run_bash_command(command: str) -> str: """Executa um comando bash na VPS e retorna a saída.""" try: + # Garante caminhos comuns no PATH para execução via PM2/Containers + custom_env = os.environ.copy() + paths = ["/usr/local/bin", "/root/.cargo/bin", "/usr/bin", "/bin"] + current_path = custom_env.get("PATH", "") + for p in paths: + if p not in current_path: + current_path = f"{p}:{current_path}" + custom_env["PATH"] = current_path + # Executa comando de forma segura dentro da VPS result = subprocess.run( command, shell=True, capture_output=True, text=True, - timeout=120 # Aumentado para comandos mais pesados + timeout=120, + env=custom_env ) output = result.stdout.strip() error = result.stderr.strip() - # Se encontrou algo no stdout, retornamos o que achou mesmo com erro (ex: find com permissão negada em algumas pastas) + # Se encontrou algo no stdout, retornamos o que achou mesmo com erro if output: return output if result.returncode != 0: + if result.returncode == 127: + return f"ERRO (127): Comando não encontrado. Verifique se o alias ou binário está no PATH. (Comando: {command})" return f"ERRO ({result.returncode}): {error if error else 'Nada no stderr'}" return "Sucesso (vazio)" diff --git a/tools_v2.py b/tools_v2.py index 9e8fd58..e424e95 100644 --- a/tools_v2.py +++ b/tools_v2.py @@ -16,7 +16,16 @@ def run_bash(command: str, timeout: int = 120) -> Dict: # Auto-moderniza docker-compose command = command.replace("docker-compose", "docker compose") try: - result = subprocess.run(command, shell=True, capture_output=True, text=True, timeout=timeout) + # Garante caminhos comuns no PATH para execução via PM2/Containers + custom_env = os.environ.copy() + paths = ["/usr/local/bin", "/root/.cargo/bin", "/usr/bin", "/bin"] + current_path = custom_env.get("PATH", "") + for p in paths: + if p not in current_path: + current_path = f"{p}:{current_path}" + custom_env["PATH"] = current_path + + result = subprocess.run(command, shell=True, capture_output=True, text=True, timeout=timeout, env=custom_env) return { "success": result.returncode == 0, "output": (result.stdout or result.stderr).strip() or "Sucesso"