83 lines
3.0 KiB
Python
83 lines
3.0 KiB
Python
|
|
import json
|
||
|
|
import os
|
||
|
|
import sys
|
||
|
|
|
||
|
|
panel_path = '/www/server/panel'
|
||
|
|
os.chdir(panel_path)
|
||
|
|
if "/www/server/panel/class" not in sys.path:
|
||
|
|
sys.path.insert(0, "/www/server/panel/class")
|
||
|
|
if "/www/server/panel" not in sys.path:
|
||
|
|
sys.path.insert(0, "/www/server/panel")
|
||
|
|
|
||
|
|
import public
|
||
|
|
|
||
|
|
|
||
|
|
def PythonDaemons():
|
||
|
|
"""
|
||
|
|
@name Python 项目守护进程
|
||
|
|
@author baozi@yakpanel.com
|
||
|
|
@time 2023-10-21
|
||
|
|
"""
|
||
|
|
if public.M('sites').where('project_type=?', ('Python',)).count() >= 1:
|
||
|
|
project_info = public.M('sites').where('project_type=?', ('Python',)).select()
|
||
|
|
for i in project_info:
|
||
|
|
try:
|
||
|
|
from projectModelV2 import pythonModel
|
||
|
|
# sites 表中的 project_config
|
||
|
|
i['project_config'] = json.loads(i['project_config'])
|
||
|
|
# auto_run, 自启,守护
|
||
|
|
if 'auto_run' in i['project_config'] and i['project_config']['auto_run'] in ["1", 1, True, "true"]:
|
||
|
|
python_obj = pythonModel.main()
|
||
|
|
# 项目的运行状态是否为运行中
|
||
|
|
if python_obj.get_project_run_state(project_name=i['name']):
|
||
|
|
continue
|
||
|
|
# 项目是否被用户停止了, 则不再自动启动
|
||
|
|
if python_obj.is_stop_by_user(i["id"]):
|
||
|
|
continue
|
||
|
|
get = public.dict_obj()
|
||
|
|
get.name = i['name']
|
||
|
|
# StartProject
|
||
|
|
python_obj.StartProject(get)
|
||
|
|
public.WriteLog('Project Daemon', 'Python project [{}] auto start!'.format(i['name']))
|
||
|
|
except Exception:
|
||
|
|
import traceback
|
||
|
|
print("Python Daemon Error: {}".format(traceback.format_exc()))
|
||
|
|
continue
|
||
|
|
|
||
|
|
|
||
|
|
def NodeDaemons():
|
||
|
|
if public.M('sites').where('project_type=?', ('Node',)).count() >= 1:
|
||
|
|
project_info = public.M('sites').where('project_type=?', ('Node',)).select()
|
||
|
|
from projectModelV2 import nodejsModel
|
||
|
|
for i in project_info:
|
||
|
|
try:
|
||
|
|
i['project_config'] = json.loads(i['project_config'])
|
||
|
|
if 'is_power_on' in i['project_config'] and i['project_config']['is_power_on'] in ["1", 1, True, "true"]: # node 默认为is_power_on
|
||
|
|
node_obj = nodejsModel.main()
|
||
|
|
get = public.dict_obj()
|
||
|
|
get.project_name = i['name']
|
||
|
|
if node_obj._get_project_run_state(get):
|
||
|
|
continue
|
||
|
|
# StartProject
|
||
|
|
node_obj.start_project(get)
|
||
|
|
public.WriteLog('Project Daemon', 'Node.js project [{}] auto start!'.format(i['name']))
|
||
|
|
except Exception:
|
||
|
|
import traceback
|
||
|
|
print("Node.js Daemon Error: {}".format(traceback.format_exc()))
|
||
|
|
continue
|
||
|
|
|
||
|
|
|
||
|
|
def GoDaemons():
|
||
|
|
pass
|
||
|
|
|
||
|
|
|
||
|
|
def main():
|
||
|
|
# go, java, python, nodejs...
|
||
|
|
GoDaemons()
|
||
|
|
NodeDaemons()
|
||
|
|
PythonDaemons()
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == '__main__':
|
||
|
|
main()
|