我正在尝试在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)
答案 0 :(得分:0)
您需要将您正在使用的用户添加到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?