【问题标题】:Errno 13 Permission denied when trying to run wkhtmltopdfErrno 13 尝试运行 wkhtmltopdf 时权限被拒绝
【发布时间】:2017-08-22 00:40:22
【问题描述】:

有类似的问题,但我的配置不是 同样。我从 wkhtmltopdf.org 下载了 wkhtmltopdf,放在 项目文件夹,我不知道为什么我仍然被拒绝访问。

试图让 django 运行 wkhtmltopdf 以生成 pdf 文件。

使用 UNICORN 运行 NGINX
使用 SUPERVISOR
Ubuntu 16

在我的 unicorn_supervisor 日志中我得到:

Internal Server Error: /invoice/1/pdf
    Traceback (most recent call last):emphasized text
      File "/home/instantuser/app/lib/python3.5/site-packages/django/core/handlers/exception.py", line 39, in inner
        response = get_response(request)
      File "/home/instantuser/app/lib/python3.5/site-packages/django/core/handlers/base.py", line 217, in _get_respons                                                                                                                           e
        response = self.process_exception_by_middleware(e, request)
      File "/home/instantuser/app/lib/python3.5/site-packages/django/core/handlers/base.py", line 215, in _get_respons                                                                                                                           e
        response = response.render()
      File "/home/instantuser/app/lib/python3.5/site-packages/django/template/response.py", line 109, in render
        self.content = self.rendered_content
      File "/home/instantuser/app/lib/python3.5/site-packages/wkhtmltopdf/views.py", line 78, in rendered_content
        cmd_options=cmd_options
      File "/home/instantuser/app/lib/python3.5/site-packages/wkhtmltopdf/utils.py", line 186, in render_pdf_from_temp                                                                                                                           late
        cmd_options=cmd_options)
      File "/home/instantuser/app/lib/python3.5/site-packages/wkhtmltopdf/utils.py", line 124, in convert_to_pdf
        return wkhtmltopdf(pages=filename, **cmd_options)
      File "/home/instantuser/app/lib/python3.5/site-packages/wkhtmltopdf/utils.py", line 110, in wkhtmltopdf
        return check_output(ck_args, **ck_kwargs)
      File "/usr/lib/python3.5/subprocess.py", line 626, in check_output
        **kwargs).stdout
      File "/usr/lib/python3.5/subprocess.py", line 693, in run
        with Popen(*popenargs, **kwargs) as process:
      File "/usr/lib/python3.5/subprocess.py", line 947, in __init__
        restore_signals, start_new_session)
      File "/usr/lib/python3.5/subprocess.py", line 1551, in _execute_child
        raise child_exception_type(errno_num, err_msg)
    PermissionError: [Errno 13] Permission denied

wkhtmltopdf 文件:

-rwxr-xr-x 1 instantuser instantuser 39804584 Nov 22 10:11 wkhtmltopdf

独角兽进程:

instant+  2949  0.1  0.5  70344 23216 ?        S    18:51   0:00 /home/instantuser/app/bin/python3 ../bin/gunicorn instanthst.wsgi:application --name instanthst --workers 3 --user=instantuser --group=instantuser --bind=unix:/home/instantuser/app/instanthst/run/gunicorn.sock --log-level=debug --log-file=-
instant+  2954  0.3  1.2 171712 51992 ?        S    18:51   0:00 /home/instantuser/app/bin/python3 ../bin/gunicorn instanthst.wsgi:application --name instanthst --workers 3 --user=instantuser --group=instantuser --bind=unix:/home/instantuser/app/instanthst/run/gunicorn.sock --log-level=debug --log-file=-
instant+  2955  0.3  1.2 171704 51936 ?        S    18:51   0:00 /home/instantuser/app/bin/python3 ../bin/gunicorn instanthst.wsgi:application --name instanthst --workers 3 --user=instantuser --group=instantuser --bind=unix:/home/instantuser/app/instanthst/run/gunicorn.sock --log-level=debug --log-file=-
instant+  2957  0.3  1.2 171568 51960 ?        S    18:51   0:00 /home/instantuser/app/bin/python3 ../bin/gunicorn instanthst.wsgi:application --name instanthst --workers 3 --user=instantuser --group=instantuser --bind=unix:/home/instantuser/app/instanthst/run/gunicorn.sock --log-level=debug --log-file=-
ubuntu    2970  0.0  0.0  12944   964 pts/0    S+   18:53   0:00 grep --color=auto unicorn

NGINX 进程

root      3006  0.0  0.0 125112  1460 ?        Ss   18:55   0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data  3007  0.0  0.0 125436  3108 ?        S    18:55   0:00 nginx: worker process
www-data  3008  0.0  0.1 125712  5060 ?        S    18:55   0:00 nginx: worker process
ubuntu    3104  0.0  0.0  12944   940 pts/0    S+   19:09   0:00 grep --color=auto nginx

为什么我的访问被拒绝,因为 wkhtmltopdf 文件所有者是同一个正在运行的独角兽?

我可以在终端中运行该命令,但 python 无法运行它。为什么?

【问题讨论】:

  • 对文件有执行权限是不够的。您还需要列出其所有父文件夹的权限。由于您将 wkhtmltopdf 放入项目文件夹中,我认为这是最有可能的问题

标签: django ubuntu nginx wkhtmltopdf


【解决方案1】:

我通过创建一个 shell 脚本文件来调用 wkhtmltopdf 来解决这个问题。

wkhtmltopdf.sh

#!/bin/sh
xvfb-run -a -s "-screen 0 1024x768x16" wkhtmltopdf $*

感谢大家的帮助。

【讨论】:

    【解决方案2】:

    只需使用 须藤 要么 须藤命令 这将以超级用户身份运行它并绕过所有权限。我不确定您无权访问超级用户的情况。当我尝试运行不应该运行的东西时,有时会发生这种情况。虽然我使用的是 ubuntu 14.04,所以我并不像其他人那样理解这一点。

    【讨论】:

      猜你喜欢
      • 2019-05-23
      • 1970-01-01
      • 1970-01-01
      • 2017-01-07
      • 2017-04-20
      • 2011-06-11
      • 2014-07-15
      • 2015-07-17
      • 2016-07-25
      相关资源
      最近更新 更多