问题一
我正在进行boa服务器移植,各个东西都配置好了,但是在secure CRT中打开后,执行./boa,显示
root@farsight\]#cd boa/
错误原因
这个错误是因为 boa 的配置文件 boa.conf 中指定了以 nobody 用户运行,但你的根文件系统里没有创建这个用户。
boa 默认为了安全,不以 root 身份运行。查看 boa.conf:
cat boa.conf | grep -E "User|Group"
User nobody
Group nogroup
但你的 /etc/passwd 里没有 nobody 这个用户,所以 boa 启动失败。
解决方案
方案一:添加 nobody 用户(推荐,符合安全设计)
在目标板子上执行:
# 添加 nobody 用户和组
echo "nobody:x:99:99:nobody:/:/bin/sh" >> /etc/passwd
echo "nogroup:x:99:" >> /etc/group
# 验证
cat /etc/passwd | grep nobody
然后重新启动 boa:
./boa
建议
嵌入式开发推荐方案一 。nobody 是标准伪用户,很多服务都会用到。而且如果你的 boa 要访问 cgi-bin 或 www 目录,用 nobody 运行时需要确保这些目录对 nobody 有读权限。
chmod 755 /boa/www
chmod 755 /boa/cgi-bin
问题二
root@farsightboa\]#./boa Cannot open /var/log/boa/access_log for logging: logfile open: No such file or directory
错误原因
这个错误是因为 boa 配置文件中指定了日志存放路径 /var/log/boa/,但这个目录在你的根文件系统中不存在。
解决
在目标板子(SecureCRT 里)执行:
mkdir -p /var/log/boa
然后重新启动 boa:
./boa
如果还报错
如果继续提示类似 Cannot open /var/log/boa/error_log,检查权限:
# 确保 boa 运行用户(nobody 或 root)能写入日志目录
chmod 755 /var/log/boa
建议检查 boa.conf 中的关键路径
boa 启动通常还需要这几个目录存在,提前建好避免后续报错:
# 查看 boa 配置里的路径设置
cat boa.conf | grep -E "DocumentRoot|ScriptAlias|ErrorLog|AccessLog"
mkdir -p /boa/www
mkdir -p /boa/cgi-bin
执行 mkdir -p /var/log/boa 后再 ./boa 试试? 如果还有别的报错把信息贴出来。
问题三
但是在之前我已经配置过。error_log 和access_log 会自动生成,只要指定的是板子上的根下对应路径就可以了。 ErrorLog /boa/log/error_log AccessLog /boa/log/access_log
检查 boa 实际读取的是哪个配置文件
# 方法1:用 strace 跟踪(如果板子上有 strace)
strace -e open ./boa 2>&1 | grep boa.conf
# 方法2:直接指定配置文件路径启动
./boa -c /boa/boa.conf
# 方法3:检查当前目录的 boa.conf 是否真的被读取
cat boa.conf | grep -E "ErrorLog|AccessLog"
常见原因
| 情况 | 说明 |
|---|---|
boa 默认读取 /etc/boa/boa.conf |
你修改的是 /boa/boa.conf,但 boa 去找 /etc 下的了 |
当前目录不是 /boa |
你在 /boa 子目录里执行 ./boa,它可能找不到 boa.conf |
快速解决
# 确认当前在 /boa 目录,且 boa.conf 在这里
cd /boa
pwd # 应该输出 /boa
ls boa.conf # 确认文件存在
# 明确指定配置文件启动
./boa -c /boa/boa.conf
或者把配置文件放到 boa 默认找的位置:
mkdir -p /etc/boa
cp /boa/boa.conf /etc/boa/boa.conf
./boa
执行 cat boa.conf | grep -E "ErrorLog|AccessLog" 看看输出什么? 确认配置是否真的如你所说指向 /boa/log/。
问题四
- User 0
- Group 0
User: The name or UID the server should run as.
Group: The group name or GID the server should run as.
- User nobody
- Group nogroup
UserDir: The name of the directory which is appended onto a user's home
- UserDir public_html
- linux@linux-vir--mac:/opt/4412/rootfs/boa$ vi boa.conf
- linux@linux-vir--mac:/opt/4412/rootfs/boa$ cat boa.conf | grep -E "ErrorLog|AccessLog"
ErrorLog: The location of the error log file. If this does not start
- ErrorLog /boa/log/error_log
- AccessLog /boa/log/access_log
- #ErrorLog "|/usr/sbin/cronolog --symlink=/var/log/boa/error_log /var/log/boa/error-%Y%m%d.log" # AccessLog: The location of the access log file. If this does not AccessLog /var/log/boa/access_log
- #AccessLog "|/usr/sbin/cronolog --symlink=/var/log/boa/access_log /var/log/boa/access-%Y%m%d.log"
错误原因
你的 boa.conf 里有两行 AccessLog 配置,第二行覆盖了第一行:
AccessLog /boa/log/access_log # ← 这行被注释或覆盖了
...
AccessLog /var/log/boa/access_log # ← 实际生效的是这行
boa 读取配置时,后面的配置会覆盖前面的同名配置 ,所以最终生效的是 /var/log/boa/access_log。
修复方法
编辑 boa.conf,删除或注释掉第二行:
vi /boa/boa.conf
找到这一行并注释掉:
AccessLog /boa/log/access_log
#ErrorLog "|/usr/sbin/cronolog ..."
# AccessLog: The location of the access log file. If this does not
- AccessLog /var/log/boa/access_log # ← 删除或注释掉这行
+ #AccessLog /var/log/boa/access_log # ← 改成这样
#AccessLog "|/usr/sbin/cronolog ..."
顺便检查 ErrorLog 是否也有重复:
cat boa.conf | grep -n "ErrorLog"
如果也有两行,同样只保留 /boa/log/error_log 那行。
验证修改
# 确认只剩正确的配置
cat boa.conf | grep -E "^ErrorLog|^AccessLog"
# 应该输出:
ErrorLog /boa/log/error_log
AccessLog /boa/log/access_log
然后重新启动 boa:
./boa