Módulo Process
El módulo process proporciona una función para ejecutar comandos del sistema operativo desde scripts Lua. Esta función es útil para la automatización de tareas administrativas, la recopilación de información del sistema y la integración con herramientas externas.
-
Ejecución de comandos con usuario no privilegiado
-
Captura de stdout y stderr por separado
-
Retorno estructurado con éxito/error
-
Soporte de argumentos variables
Nota de seguridad: Todos los comandos se ejecutan con el usuario monstasb para garantizar seguridad y control de permisos.
Funciones Disponibles
Sección titulada «Funciones Disponibles»1. process.exec(command, [arg1], [arg2], ...)
Sección titulada «1. process.exec(command, [arg1], [arg2], ...)»Ejecuta un comando del sistema operativo con los argumentos especificados.
Parámetros:
Sección titulada «Parámetros:»-
command (string): Nombre del comando/programa a ejecutar
-
… (opcional, strings): Argumentos adicionales para el comando
Retorno:
Sección titulada «Retorno:»-
tuple:
(out, err)donde:-
out (string o nil): Salida estándar del comando si tiene éxito, o
nilsi falla -
err (string o nil): Salida de error del comando si falla, o
nilsi tiene éxito
-
Comportamiento:
Sección titulada «Comportamiento:»-
El comando se ejecuta con el usuario
monstasb -
Si el comando devuelve código de salida 0 (éxito):
-
outcontiene la salida del comando -
erresnil
-
-
Si el comando falla (código ≠ 0):
-
outes nil -
errcontiene la salida de error (stderr) del comando
-
-
Si hay un error en la ejecución (comando no encontrado, etc.):
-
outesnil -
errcontiene el mensaje de error
-
Ejemplo de Uso:
Sección titulada «Ejemplo de Uso:»-- Ejecutar comando simplelocal saida, erro = process.exec("ls", "-la", "/tmp")if saida then print("Conteúdo de /tmp:") print(saida)else print("Erro:", erro)end
-- Ejecutar comando con múltiples argumentoslocal saida, erro = process.exec("df", "-h")if saida then -- Processar saída do df local linhas = string.split(saida, "\n") for _, linha in ipairs(linhas) do print("Linha:", linha) endend
-- Verificar si un servicio está en ejecuciónlocal saida, erro = process.exec("systemctl", "is-active", "nginx")if saida then local status = string.trim(saida) if status == "active" then print("Nginx está ativo") else print("Nginx não está ativo:", status) endelse print("Erro ao verificar Nginx:", erro)end
-- Recopilar información del sistemalocal comandos = { {"uname", "-a"}, {"uptime"}, {"free", "-h"}, {"df", "-h", "/"}}
for _, cmd_args in ipairs(comandos) do local comando = table.remove(cmd_args, 1) local saida, erro = process.exec(comando, table.unpack(cmd_args)) if saida then print("=== " .. comando .. " ===") print(saida) endendInformación Adicional
Sección titulada «Información Adicional»Ejecución con Usuario Específico
Sección titulada «Ejecución con Usuario Específico»Todos los comandos se ejecutan con el usuario monstasb:
-- Seguridad: los comandos no se ejecutan como rootprocess.exec("whoami") -- Retornará "monstasb", no "root"Soporte de Argumentos Variables
Sección titulada «Soporte de Argumentos Variables»Acepta cualquier número de argumentos:
-- 1 argumentoprocess.exec("ls")
-- 2 argumentosprocess.exec("ls", "-la")
-- Múltiples argumentosprocess.exec("find", ".", "-name", "*.log", "-type", "f", "-mtime", "+7")