增加nginx的标签
This commit is contained in:
@@ -401,6 +401,41 @@ class GunicornServiceControlThread(QThread):
|
||||
self.result_ready.emit(False, error_msg)
|
||||
logger.error(f"Gunicorn服务控制异常: {error_msg}")
|
||||
|
||||
class GunicornLogThread(QThread):
|
||||
"""查看Gunicorn服务日志的线程"""
|
||||
result_ready = Signal(bool, str)
|
||||
|
||||
def __init__(self, ssh_client, service_name, password, lines=100):
|
||||
super().__init__()
|
||||
self.ssh_client = ssh_client
|
||||
self.service_name = service_name
|
||||
self.password = password
|
||||
self.lines = lines # 要查看的日志行数
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
# 使用journalctl查看Gunicorn服务的日志
|
||||
command = f"bash -c 'echo \"{self.password}\" | sudo -S journalctl -u {self.service_name} -n {self.lines}'"
|
||||
logger.info(f"查看Gunicorn服务日志: {command}")
|
||||
|
||||
stdin, stdout, stderr = self.ssh_client.exec_command(command)
|
||||
exit_status = stdout.channel.recv_exit_status()
|
||||
|
||||
output = stdout.read().decode()
|
||||
error = stderr.read().decode()
|
||||
|
||||
if exit_status == 0:
|
||||
self.result_ready.emit(True, output)
|
||||
logger.info(f"Gunicorn服务日志查看成功")
|
||||
else:
|
||||
self.result_ready.emit(False, f"查看日志失败: {error}")
|
||||
logger.error(f"Gunicorn服务日志查看失败: {error}")
|
||||
|
||||
except Exception as e:
|
||||
error_msg = str(e)
|
||||
self.result_ready.emit(False, error_msg)
|
||||
logger.error(f"Gunicorn服务日志查看异常: {error_msg}")
|
||||
|
||||
class ServerControlThread(QThread):
|
||||
"""控制服务器设置的线程"""
|
||||
result_ready = Signal(bool, str)
|
||||
@@ -538,6 +573,11 @@ class GunicornTab(QWidget):
|
||||
self.check_status_btn.clicked.connect(self.check_service_status)
|
||||
service_btn_layout.addWidget(self.check_status_btn)
|
||||
|
||||
# 查看服务日志按钮
|
||||
self.view_logs_btn = QPushButton("查看服务日志")
|
||||
self.view_logs_btn.clicked.connect(self.view_service_logs)
|
||||
service_btn_layout.addWidget(self.view_logs_btn)
|
||||
|
||||
service_layout.addLayout(service_btn_layout)
|
||||
layout.addLayout(service_layout)
|
||||
|
||||
@@ -887,6 +927,43 @@ class GunicornTab(QWidget):
|
||||
else:
|
||||
self.append_output("用户取消了密码输入")
|
||||
|
||||
def view_service_logs(self):
|
||||
"""查看Gunicorn服务日志"""
|
||||
if not self.ssh_client:
|
||||
self.append_output("错误: 未连接到服务器")
|
||||
return
|
||||
|
||||
if not self.project_name:
|
||||
self.append_output("错误: 未设置项目名")
|
||||
return
|
||||
|
||||
service_name = f"gunicorn_{self.project_name}"
|
||||
|
||||
# 请求用户输入sudo密码
|
||||
dialog = PasswordDialog(self)
|
||||
if dialog.exec_() == QDialog.Accepted:
|
||||
password = dialog.get_password()
|
||||
self.append_output(f"正在查看Gunicorn服务日志: {service_name}...")
|
||||
|
||||
# 创建并启动日志查看线程
|
||||
self.log_thread = GunicornLogThread(self.ssh_client, service_name, password)
|
||||
self.log_thread.result_ready.connect(self.on_log_result)
|
||||
self.log_thread.start()
|
||||
else:
|
||||
self.append_output("用户取消了密码输入")
|
||||
|
||||
def on_log_result(self, success, message):
|
||||
"""处理日志查看结果"""
|
||||
if success:
|
||||
self.append_output("--- Gunicorn服务日志 ---")
|
||||
self.append_output(message)
|
||||
self.append_output("--- 日志结束 ---")
|
||||
logger.info("Gunicorn服务日志查看成功")
|
||||
else:
|
||||
self.append_output(f"查看日志失败: {message}")
|
||||
logger.error(f"Gunicorn服务日志查看失败: {message}")
|
||||
QMessageBox.warning(self, "错误", f"Gunicorn服务日志查看失败: {message}")
|
||||
|
||||
def on_control_result(self, success, message):
|
||||
"""处理控制结果"""
|
||||
if success:
|
||||
|
||||
Reference in New Issue
Block a user