使用os.execute在Linux上启动hostapd的Nginx Lua

我可以使用openresty运行的Nginx Web服务器成功运行许多不同的命令。唯一无法运行的命令是使用lua的os.execute运行hostapd。请参见以下代码。唯一不起作用的命令是最后一个。

失败的命令:

set_command_status = os.execute("source /etc/profile ; /usr/bin/hostapd -B /etc/hostapd/hostapd.conf >> /tmp/hostapd.log 2>&1")
    ngx.log(ngx.INFO, "Hostapd launch status: " .. set_command_status)
    ngx.log(ngx.INFO, "Done Restarting HOSTAPD")

完整的代码:

-- 重启热点并更改名称
ngx.log(ngx.INFO, "Restarting HOSTAPD: " .. json_table.hotspot_name)
set_command_status = os.execute("kill -9 `pgrep -f hostapd`")
ngx.log(ngx.INFO, "Kill status: " .. set_command_status)
set_command_status = os.execute("cp /mnt/apps/hostapd.conf /tmp/")
ngx.log(ngx.INFO, "Copy status: " .. set_command_status)
set_command_status = os.execute("find /tmp -type f -name \"hostapd.conf\" | xargs sed -i -e \"s/wpa_passphrase=asdfasdf/wpa_passphrase=password/g\"")
ngx.log(ngx.INFO, "Hostapd config password status: " .. set_command_status)
set_command_status = os.execute("find /tmp -type f -name \"hostapd.conf\" | xargs sed -i -e \"s/ssid=nightcrawler/ssid=FC3550-" .. json_table.hotspot_name .. "/g\"")
ngx.log(ngx.INFO, "Hostapd config ssid status: " .. set_command_status)
set_command_status = os.execute("source /etc/profile ; /usr/bin/hostapd -B /etc/hostapd/hostapd.conf >> /tmp/hostapd.log 2>&1")
ngx.log(ngx.INFO, "Hostapd launch status: " .. set_command_status)
ngx.log(ngx.INFO, "Done Restarting HOSTAPD")

-- 完成
ngx.log(ngx.INFO, "Success setting HotSpot Name")

ngx.exit(ngx.OK)

日志显示:

$ cat /tmp/hostapd.log
Configuration file: /etc/hostapd/hostapd.conf
wlan1: interface state UNINITIALIZED->COUNTRY_UPDATE

如何从nginx和openresty启动hostapd?

点赞