修改了Gunicorn标签内容
This commit is contained in:
110
threads.py
110
threads.py
@@ -307,7 +307,7 @@ class DjangoInstallThread(QThread):
|
||||
self.progress_updated.emit(30)
|
||||
|
||||
# 尝试使用pip安装
|
||||
stdin, stdout, stderr = self.ssh_client.exec_command("pip3 install django")
|
||||
stdin, stdout, stderr = self.ssh_client.exec_command("pip3 install --break-system-packages django")
|
||||
exit_status = stdout.channel.recv_exit_status()
|
||||
|
||||
if exit_status == 0:
|
||||
@@ -372,7 +372,7 @@ class DjangoTestThread(QThread):
|
||||
if exit_status == 0:
|
||||
self.progress_updated.emit(50)
|
||||
# 安装依赖
|
||||
stdin, stdout, stderr = self.ssh_client.exec_command(f"cd {self.django_path} && pip3 install -r requirements.txt")
|
||||
stdin, stdout, stderr = self.ssh_client.exec_command(f"cd {self.django_path} && pip3 install --break-system-packages -r requirements.txt")
|
||||
exit_status = stdout.channel.recv_exit_status()
|
||||
|
||||
if exit_status != 0:
|
||||
@@ -384,7 +384,7 @@ class DjangoTestThread(QThread):
|
||||
self.progress_updated.emit(70)
|
||||
|
||||
# 运行Django测试服务器
|
||||
stdin, stdout, stderr = self.ssh_client.exec_command(f"cd {self.django_path} && python3 manage.py runserver 0.0.0.0:8000 --noreload &")
|
||||
stdin, stdout, stderr = self.ssh_client.exec_command(f"cd {self.django_path} && timeout 10 python3 manage.py runserver 0.0.0.0:8000 --noreload &")
|
||||
time.sleep(3) # 等待服务器启动
|
||||
|
||||
# 检查服务器是否运行
|
||||
@@ -692,15 +692,23 @@ class GunicornTestThread(QThread):
|
||||
self.progress_updated.emit(30)
|
||||
|
||||
# 检查wsgi.py文件
|
||||
project_name = os.path.basename(self.django_path)
|
||||
wsgi_path = f"{self.django_path}/{project_name}/wsgi.py"
|
||||
project_name = os.path.basename(self.django_path.rstrip('/'))
|
||||
wsgi_path = f"{self.django_path.rstrip('/')}/{project_name}/wsgi.py"
|
||||
stdin, stdout, stderr = self.ssh_client.exec_command(f"ls -la {wsgi_path}")
|
||||
exit_status = stdout.channel.recv_exit_status()
|
||||
|
||||
if exit_status != 0:
|
||||
self.result_ready.emit(False, f"wsgi.py文件不存在: {wsgi_path}")
|
||||
logger.error(f"wsgi.py文件不存在: {wsgi_path}")
|
||||
return
|
||||
# 尝试在Django项目根目录下查找wsgi.py文件
|
||||
stdin, stdout, stderr = self.ssh_client.exec_command(f"find {self.django_path} -name wsgi.py")
|
||||
exit_status = stdout.channel.recv_exit_status()
|
||||
|
||||
if exit_status == 0:
|
||||
wsgi_path = stdout.read().decode().strip()
|
||||
logger.info(f"找到wsgi.py文件: {wsgi_path}")
|
||||
else:
|
||||
self.result_ready.emit(False, f"wsgi.py文件不存在: {wsgi_path}")
|
||||
logger.error(f"wsgi.py文件不存在: {wsgi_path}")
|
||||
return
|
||||
|
||||
self.progress_updated.emit(50)
|
||||
|
||||
@@ -745,11 +753,15 @@ class UploadGunicornServiceThread(QThread):
|
||||
service_file = f"/etc/systemd/system/{self.service_name}.service"
|
||||
temp_file = f"/tmp/{self.service_name}.service"
|
||||
|
||||
logger.info(f"准备上传服务文件: {service_file}")
|
||||
|
||||
sftp = self.ssh_client.open_sftp()
|
||||
|
||||
with sftp.file(temp_file, 'w') as f:
|
||||
f.write(self.service_content)
|
||||
|
||||
logger.info(f"临时服务文件创建成功: {temp_file}")
|
||||
|
||||
# 移动到systemd目录
|
||||
if self.password:
|
||||
stdin, stdout, stderr = self.ssh_client.exec_command(f"sudo -S mv {temp_file} {service_file}")
|
||||
@@ -761,11 +773,13 @@ class UploadGunicornServiceThread(QThread):
|
||||
|
||||
if exit_status != 0:
|
||||
error = stderr.read().decode()
|
||||
self.result_ready.emit(False, f"服务文件移动失败: {error}")
|
||||
logger.error(f"服务文件移动失败: {error}")
|
||||
self.result_ready.emit(False, f"服务文件移动失败: {error}")
|
||||
sftp.close()
|
||||
return
|
||||
|
||||
logger.info(f"服务文件移动成功: {service_file}")
|
||||
|
||||
# 设置权限
|
||||
if self.password:
|
||||
stdin, stdout, stderr = self.ssh_client.exec_command(f"sudo -S chmod 644 {service_file}")
|
||||
@@ -777,8 +791,24 @@ class UploadGunicornServiceThread(QThread):
|
||||
|
||||
if exit_status != 0:
|
||||
error = stderr.read().decode()
|
||||
self.result_ready.emit(False, f"权限设置失败: {error}")
|
||||
logger.error(f"权限设置失败: {error}")
|
||||
self.result_ready.emit(False, f"权限设置失败: {error}")
|
||||
sftp.close()
|
||||
return
|
||||
|
||||
logger.info(f"服务文件权限设置成功: {service_file}")
|
||||
|
||||
# 验证服务文件是否存在
|
||||
stdin, stdout, stderr = self.ssh_client.exec_command(f"ls -la {service_file}")
|
||||
exit_status = stdout.channel.recv_exit_status()
|
||||
|
||||
if exit_status == 0:
|
||||
file_info = stdout.read().decode().strip()
|
||||
logger.info(f"服务文件验证成功: {file_info}")
|
||||
else:
|
||||
error = stderr.read().decode()
|
||||
logger.error(f"服务文件验证失败: {error}")
|
||||
self.result_ready.emit(False, f"服务文件验证失败: {error}")
|
||||
sftp.close()
|
||||
return
|
||||
|
||||
@@ -789,6 +819,27 @@ class UploadGunicornServiceThread(QThread):
|
||||
stdin.flush()
|
||||
else:
|
||||
stdin, stdout, stderr = self.ssh_client.exec_command("sudo systemctl daemon-reload")
|
||||
exit_status = stdout.channel.recv_exit_status()
|
||||
|
||||
if exit_status != 0:
|
||||
error = stderr.read().decode()
|
||||
logger.error(f"systemd重新加载失败: {error}")
|
||||
self.result_ready.emit(False, f"systemd重新加载失败: {error}")
|
||||
sftp.close()
|
||||
return
|
||||
|
||||
logger.info(f"systemd重新加载成功")
|
||||
|
||||
# 验证服务是否被systemd识别
|
||||
stdin, stdout, stderr = self.ssh_client.exec_command(f"systemctl list-unit-files | grep {self.service_name}")
|
||||
exit_status = stdout.channel.recv_exit_status()
|
||||
|
||||
if exit_status == 0:
|
||||
service_info = stdout.read().decode().strip()
|
||||
logger.info(f"服务被systemd识别: {service_info}")
|
||||
else:
|
||||
error = stderr.read().decode()
|
||||
logger.warning(f"服务未被systemd识别: {error}")
|
||||
|
||||
sftp.close()
|
||||
|
||||
@@ -797,8 +848,8 @@ class UploadGunicornServiceThread(QThread):
|
||||
|
||||
except Exception as e:
|
||||
error_msg = str(e)
|
||||
self.result_ready.emit(False, error_msg)
|
||||
logger.error(f"服务文件上传异常: {error_msg}")
|
||||
self.result_ready.emit(False, error_msg)
|
||||
|
||||
|
||||
class ManageGunicornServiceThread(QThread):
|
||||
@@ -814,7 +865,28 @@ class ManageGunicornServiceThread(QThread):
|
||||
def run(self):
|
||||
try:
|
||||
# 构建systemd命令
|
||||
cmd = f"systemctl {self.action} {self.service_name}"
|
||||
# 注意:systemd命令中不需要.service后缀
|
||||
service_name_for_systemd = self.service_name
|
||||
if service_name_for_systemd.endswith('.service'):
|
||||
service_name_for_systemd = service_name_for_systemd[:-8] # 移除.service后缀
|
||||
|
||||
cmd = f"systemctl {self.action} {service_name_for_systemd}"
|
||||
|
||||
logger.info(f"执行服务管理命令: {cmd}")
|
||||
|
||||
# 首先检查服务文件是否存在
|
||||
service_file = f"/etc/systemd/system/{self.service_name}.service"
|
||||
stdin, stdout, stderr = self.ssh_client.exec_command(f"ls -la {service_file}")
|
||||
exit_status = stdout.channel.recv_exit_status()
|
||||
|
||||
if exit_status != 0:
|
||||
error = stderr.read().decode()
|
||||
logger.error(f"服务文件不存在: {service_file}, 错误: {error}")
|
||||
self.result_ready.emit(False, f"服务文件不存在: {self.service_name}.service")
|
||||
return
|
||||
|
||||
file_info = stdout.read().decode().strip()
|
||||
logger.info(f"服务文件存在: {file_info}")
|
||||
|
||||
if self.action == "status":
|
||||
# 状态命令需要特殊处理
|
||||
@@ -828,12 +900,12 @@ class ManageGunicornServiceThread(QThread):
|
||||
|
||||
if exit_status == 0:
|
||||
output = stdout.read().decode()
|
||||
logger.info(f"服务状态查询成功: {service_name_for_systemd}")
|
||||
self.result_ready.emit(True, output)
|
||||
logger.info(f"服务状态查询成功: {self.service_name}")
|
||||
else:
|
||||
error = stderr.read().decode()
|
||||
self.result_ready.emit(False, error)
|
||||
logger.error(f"服务状态查询失败: {error}")
|
||||
self.result_ready.emit(False, error)
|
||||
else:
|
||||
# 其他操作(start, stop, restart, enable, disable)
|
||||
if self.password:
|
||||
@@ -845,14 +917,14 @@ class ManageGunicornServiceThread(QThread):
|
||||
exit_status = stdout.channel.recv_exit_status()
|
||||
|
||||
if exit_status == 0:
|
||||
self.result_ready.emit(True, f"服务{self.action}成功: {self.service_name}")
|
||||
logger.info(f"服务{self.action}成功: {self.service_name}")
|
||||
logger.info(f"服务{self.action}成功: {service_name_for_systemd}")
|
||||
self.result_ready.emit(True, f"服务{self.action}成功: {service_name_for_systemd}")
|
||||
else:
|
||||
error = stderr.read().decode()
|
||||
self.result_ready.emit(False, error)
|
||||
logger.error(f"服务{self.action}失败: {error}")
|
||||
self.result_ready.emit(False, error)
|
||||
|
||||
except Exception as e:
|
||||
error_msg = str(e)
|
||||
self.result_ready.emit(False, error_msg)
|
||||
logger.error(f"服务管理异常: {error_msg}")
|
||||
logger.error(f"服务管理异常: {error_msg}")
|
||||
self.result_ready.emit(False, error_msg)
|
||||
Reference in New Issue
Block a user