【问题标题】:Run script in Django [duplicate]在Django中运行脚本[重复]
【发布时间】:2016-08-09 20:42:55
【问题描述】:

我正在尝试在 Django 中运行脚本。该脚本需要使用 sudo 运行,并且我已经设置了 sudoers 文件,以便可以在不输入 sudo 密码的情况下执行命令。当我使用默认测试服务器时,即>python manage.py runserver 0.0.0.0:8000,脚本执行没有问题。但是,使用 Nginx 和 uWSGI 部署 Django 后,命令失败并返回响应

sudo: no tty present and no askpass program specified

我是否遗漏了某种配置?

我正在使用子进程执行脚本,Django视图内的代码是这样的:

subprocess.check_output( "sudo /path/to/file/fileName.sh", shell=True)

【问题讨论】:

  • 你确定即使是运行 uwsgi 的用户也有权在不提供密码的情况下运行脚本?您是否检查过您的 sudoers 文件不包含 requiretty 选项?
  • 如果你能编写一个 python 代码来执行脚本所做的事情并将该 python 代码放在你的视图中,那就更好了。

标签: python django shell ubuntu nginx


【解决方案1】:

您需要将您正在使用的用户添加到 sudoers 列表中:

授予用户使用该命令而不提示输入密码应该可以解决问题。首先打开一个shell控制台并输入:

sudo visudo

然后编辑该文件以添加到最后:

username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand

例如

john ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop

将允许用户 'john' 在不提示输入密码的情况下 sudo poweroff、启动和停止。

在屏幕底部查看您需要在 visudo 中使用的击键 - 顺便说一下,这不是 vi - 并在出现任何问题的第一个迹象时退出而不保存。健康警告:损坏此文件将产生严重后果,请谨慎编辑!

来源:How to fix 'sudo: no tty present and no askpass program specified' error?

【讨论】:

  • 我已经这样做了。问题是该命令在部署的 Django 中不起作用
  • 哪个用户正在运行脚本?必须将该用户添加到 sudoers 列表中(顺便说一句,使用 sudoer 用户运行 Web 应用程序确实不安全)。
  • 运行脚本的用户与sudoers文件相同。约翰喜欢上面的例子。
  • 但在正常情况下,Nginx 使用“www-data”用户,如果您的脚本是自动化的,因此它运行在一些与 Web 相关的事件上,它将由 www-data 执行。
猜你喜欢
  • 2023-02-22
  • 2014-04-20
  • 2016-09-16
  • 1970-01-01
  • 2019-01-05
  • 2018-08-06
  • 2013-01-02
  • 2021-10-22
  • 1970-01-01
相关资源
最近更新 更多