在Django中运行脚本
在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)
问题:在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?