在Django中运行脚本

13 浏览
0 Comments

在Django中运行脚本

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

sudo: no tty present and no askpass program specified

\n我是否错过了某种配置?\n我正在使用subprocess来执行该脚本,Django视图中的代码如下:\n

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

0
0 Comments

问题:在Django中运行脚本的原因以及解决方法

在部署的Django应用中,出现了无法运行命令的问题。根据之前的解决方案,已经将用户添加到了sudoers列表中,但问题仍然存在。

问题的根本在于脚本的执行用户。需要将执行脚本的用户添加到sudoers列表中,但使用sudoer用户来运行Web应用是不安全的。

通常情况下,Nginx使用"www-data"用户来运行。如果脚本是自动化的,会在一些与Web相关的事件中被执行,并且会由www-data用户来执行。

要解决这个问题,需要将www-data用户添加到sudoers列表中。以下是具体的解决方法:

首先,打开一个终端窗口,输入以下命令来编辑sudoers文件:

sudo visudo

然后,在文件的末尾添加以下内容:

www-data ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand

例如:

www-data ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop

这将允许用户www-data在执行poweroff、start和stop命令时无需输入密码。

在visudo中,注意底部屏幕上显示的按键操作,这不是vi编辑器,如果出现任何问题,请立即退出而不保存。请注意,对该文件的破坏会产生严重后果,请小心编辑!

通过以上操作,将www-data用户添加到sudoers列表中,即可解决在Django中运行脚本的问题。

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

0