Apache 无法在符号链接‘/var’中找到目录

Apache 无法在符号链接‘/var’中找到目录

我有以下目录,其中/data是数据分区的挂载点,并且/var是符号链接:

lrwxrwxrwx 1 root root 9 Nov 20 13:25 /var -> /data/var
lrwxrwxrwx 1 root root 9 Nov 20 23:41 /var/lock -> /run/lock
drwxr-xr-x 5 root root 4096 Nov 20 13:42 /data
drwxr-xr-x 12 root root 4096 Nov 21 01:44 /data/var
drwxr-xr-x 6 root root 4096 Dec 18 06:25 /data/var/log
drwxr-x--- 3 root adm 4096 Dec  8 06:25 /data/var/log/apache2/

Apache 似乎对这种方法存在问题:

mktemp: failed to create directory via template '/var/lock/apache2.XXXXXXXXXX': No such file or directory

我通过改为直接/etc/apache2/envvars引用来解决这个问题,但是通过改变来/run/lock解决这个问题:APACHE_LOG_DIRenvvars

(2)No such file or directory: AH02291: Cannot access directory '/var/log/apache2/' for main error log
(2)No such file or directory: AH02291: Cannot access directory '/var/log/apache2/' for error log of vhost defined at /etc/apache2/sites-enabled/site.conf:2
AH00014: Configuration check failed

我怎样才能让它工作?

答案1

不要对 /var 进行符号链接,因为它的用途远不止 Apache。如果您只想将 apache 日志和站点文件移动到另一个分区/文件夹/磁盘,那么只需更改 apache 中的配置即可。它是一个非常灵活的 Web 服务器,允许您将文件放在任何您想要的地方,但您试图做的是重定向操作系统的核心文件夹,而您应该更新 apache 配置以将内容存储在您希望它们去的地方。

答案2

解决方案是绑定挂载,而不是符号链接,正如推荐的那样这里/var,并根据第 7 点中给出的符号链接进行推理:

层次结构标准规定它必须是目录

就我而言,从符号链接切换到绑定挂载是通过以下方式完成的:

sudo -s
rm /var && mkdir -p /var && mount -o bind /data/var /var
cat >> /etc/fstab << END
/data/var /var none bind 0 0
END

现在 apache 可以顺利启动了。

答案3

一些基于 Linux 的发行版在运行时启用了 SELinux,并配置为正常使用。您超出了这些参数,因此可能需要调整 SELinux。

相关内容