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
1. process.exec(command, [arg1], [arg2], ...)
Executa um comando do sistema operacional com os argumentos especificados.
Parâmetros:
- command (string): Nome do comando/programa a ser executado
- ... (opcional, strings): Argumentos adicionais para o comando
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
-
out (string ou nil): Saída padrão do comando se bem-sucedido, ou
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:
-- Executar comando simples
local 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 argumentos
local 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)
end
end
-- Verificar se um serviço está rodando
local 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)
end
else
print("Erro ao verificar Nginx:", erro)
end
-- Coletar informações do sistema
local 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)
end
end
Informações Adicionais
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 root
process.exec("whoami") -- Retornará "monstasb", não "root"
Suporte a Argumentos Variáveis
Aceita qualquer número de argumentos:
-- 1 argumento
process.exec("ls")
-- 2 argumentos
process.exec("ls", "-la")
-- Múltiplos argumentos
process.exec("find", ".", "-name", "*.log", "-type", "f", "-mtime", "+7")