我是 python Flask 应用程序网络托管的新手,在网络应用程序中,我尝试设置功能以在每项工作完成后关闭服务器。我已经在 Flask jinja python 虚拟环境中构建了该应用程序,并使用 apache Web 服务由 wsgi 托管。用户 apache 具有执行脚本的 root 权限,以及完整权限。
整个Rocky Linux操作系统运行在树莓派4上
问题 当我尝试使用以下选项来关闭由 apache 托管的服务时,我在 apache error_log 文件中收到以下错误。
sudo: PAM account management error: Permission denied
sudo: unable to open audit system: Permission denied
sudo: a password is required
python init.py 文件
data = 'yes'
down(data)
def down(cname = None):
try:
if cname == 'yes':
print (cname)
if os.name != 'nt':
#os.system("sudo shutdown -h now")
#os.system('sudo systemctl poweroff')
#subprocess.check_output("sudo /sbin/shutdown -h now", shell=True, universal_newlines=True)
subprocess.call(["sudo", "shutdown", "-h", "now"])
#os.system('sudo bash [complete path to the script]/off.ksh')
#os.system('python [complete path to the script]/test.py')
#subprocess.run(["python", "[complete path to the script]/test.py"])
else :
os.system('shutdown /s')
return
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
e = str(e) + str(exc_type) + str(exc_tb.tb_lineno)
return Exception(e)
**off.ksh**
#!/bin/bash
sudo shutdown -h now
`**test.py**
import os
if os.name != 'nt':
print(os.name)
os.system('sudo shutdown -h now')
else :
os.system('shutdown /s')`
请提供尽快解决此问题的想法,如果问题没有意义,请告诉我。
你可以通过在 apache 权限中做一些令人讨厌的事情来实现这一点,但到目前为止,这是可能的。
#!/bin/bash
# Check if the user has sufficient privileges
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi
# Shutdown the server
shutdown -h now
chmod +x shutdown_server.sh
www-data ALL=(ALL) NOPASSWD: /sbin/shutdown
from flask import Flask, request
import subprocess
app = Flask(__name__)
@app.route('/shutdown', methods=['POST'])
def shutdown():
subprocess.call(["/path/to/shutdown_server.sh"])
return 'Shutting down...'
if __name__ == '__main__':
app.run(debug=True)