Unoconv作为apache用户无法创建文件

时间:2015-05-11 12:59:39

标签: linux apache shell centos7

我使用unoconv作为apache用户来创建PDF文件。它作为终端用户运行良好,但当我作为apache用户运行时。我收到错误。

sudo -u apache  /usr/bin/unoconv -o /home/gloryque/tmp/1431347151.pdf -f pdf /home/gloryque/tmp/8.doc

我收到错误

mkstemp("/usr/share/httpd/.execoool7VwpU") failed: Permission denied
mkstemp("/usr/share/httpd/.execooouoUVdw") failed: Permission denied
mkstemp("/usr/share/httpd/.execooopRuy27") failed: Permission denied
mkstemp("/usr/share/httpd/.execooov92dRJ") failed: Permission denied
mkstemp("/usr/share/httpd/.execoooiZZVFl") failed: Permission denied
mkstemp("/usr/share/httpd/.execooowk5LuX") failed: Permission denied
mkstemp("/usr/share/httpd/.execoooCgtDjz") failed: Permission denied
mkstemp("/usr/share/httpd/.execoooLxXy8a") failed: Permission denied
mkstemp("/usr/share/httpd/.execooo8LCvXM") failed: Permission denied

我正在使用centos 7 Machine

2 个答案:

答案 0 :(得分:2)

unoconv尝试在/usr/share/httpd中写一些临时数据。它显然没有这样做的许可。

在我的测试中(在Ubuntu系统上),HOME环境变量一直是关键点。使用

HOME=/tmp sudo -u apache  /usr/bin/unoconv -o /home/gloryque/tmp/1431347151.pdf -f pdf /home/gloryque/tmp/8.doc

暂时将HOME设置为/tmp解决了这个问题。

apache用户还需要将结果数据写入目标目录/home/gloryque/tmp的权限。

答案 1 :(得分:2)

我建议如下:

  • 使用最新版本的unoconv(发布时至少为v0.7,或今天来自GitHub的主分支)

  • 使用LibreOffice的最新稳定版本(最近版本使用更少的内存,通常更快,崩溃更少)

  • 使用本机LibreOffice python二进制文件来运行unoconv,例如。 /opt/libreoffice4.4/program/python / usr / bin / unoconv -f pdf file.doc

  • 在unoconv脚本shebang中对python路径进行硬编码,所以放在#!/ opt / libreoffice4.4 / program / python的第一行而不是#!/ usr / bin / env python。 (Apache / PHP通常不设置PATH,因此unoconv失败)

  • 确保运行unoconv的用户可以访问其HOME目录

如果你这样做,一切都应该没问题。如果LibreOffice仍然崩溃,你应该对上游项目采取这种做法。还要注意LibreOffice不能同时处理多个连接/客户端,所以理想情况下你的PHP脚本应该正确锁定和/或排队请求。

如果您仍有任何问题,请报告给:http://github.com/dagwieers/unoconv/issues