Módulo Process
O módulo process fornece uma função para execução de comandos do sistema operacional a partir de scripts Lua. Esta função é útil para automação de tarefas administrativas, coleta de informações do sistema e integração com ferramentas externas.
-
Execução de comandos com usuário não privilegiado
-
Captura de stdout e stderr separadamente
-
Retorno estruturado com sucesso/erro
-
Suporte a argumentos variáveis
Nota de segurança: Todos os comandos são executados com o usuário monstasb para garantir segurança e controle de permissões.
Funções Disponíveis
Seção intitulada “Funções Disponíveis”1. process.exec(command, [arg1], [arg2], ...)
Seção intitulada “1. process.exec(command, [arg1], [arg2], ...)”Executa um comando do sistema operacional com os argumentos especificados.
Parâmetros:
Seção intitulada “Parâmetros:”-
command (string): Nome do comando/programa a ser executado
-
… (opcional, strings): Argumentos adicionais para o comando
Retorno:
Seção intitulada “Retorno:”-
tuple:
(out, err)onde:-
out (string ou nil): Saída padrão do comando se bem-sucedido, ou
nilse falhar -
err (string ou nil): Saída de erro do comando se falhar, ou
nilse bem-sucedido
-
Comportamento:
Seção intitulada “Comportamento:”-
O comando é executado com o usuário
monstasb -
Se o comando retornar código de saída 0 (sucesso):
-
outcontém a saída do comando -
errénil
-
-
Se o comando falhar (código ≠ 0):
-
outé nil -
errcontém a saída de erro (stderr) do comando
-
-
Se houver erro na execução (comando não encontrado, etc.):
-
outénil -
errcontém a mensagem de erro
-
Exemplo de Uso:
Seção intitulada “Exemplo de Uso:”-- Executar comando simpleslocal saida, erro = process.exec("ls", "-la", "/tmp")if saida then print("Conteúdo de /tmp:") print(saida)else print("Erro:", erro)end
-- Executar comando com múltiplos 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 se um serviço está rodandolocal 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
-- Coletar informações do 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) endendInformações Adicionais
Seção intitulada “Informações Adicionais”Execução com Usuário Específico
Seção intitulada “Execução com Usuário Específico”Todos os comandos são executados com o usuário monstasb:
-- Segurança: comandos não são executados como rootprocess.exec("whoami") -- Retornará "monstasb", não "root"Suporte a Argumentos Variáveis
Seção intitulada “Suporte a Argumentos Variáveis”Aceita qualquer número de argumentos:
-- 1 argumentoprocess.exec("ls")
-- 2 argumentosprocess.exec("ls", "-la")
-- Múltiplos argumentosprocess.exec("find", ".", "-name", "*.log", "-type", "f", "-mtime", "+7")