咏南中间件随LINUX开机自动启动

咏南中间件随LINUX开机自动启动

LINUX DEAMON,LINUX也有类似WINDOWS的服务。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
program ynCrossServer;
{$HINTS OFF}
{$APPTYPE CONSOLE}
 
{$R *.res}
 
uses
  {$IFDEF MSWINDOWS}
  MidasLib,
  {$ENDIF }
  {$IFDEF POSIX}
  Posix.Unistd,
  {$ENDIF}
  uPlugHelp,
  uUnidacPool,
  Web.WebReq,
  IdHTTPWebBrokerBridge,
  uLog,
  System.SysUtils,
  WebservicesImpl in 'WebservicesImpl.pas',
  WebservicesIntf in 'WebservicesIntf.pas',
  WebModuleUnit1 in 'WebModuleUnit1.pas' {WebModule1: TWebModule},
  uWebservices in 'uWebservices.pas' {ynWebServices: TDataModule},
  uIDTcpSvr in 'uIDTcpSvr.pas' {idTcpSvr: TDataModule},
  uIDHttpSvr in 'uIDHttpSvr.pas' {idHttpSvr: TDataModule},
  uCrossHttpSvr in 'uCrossHttpSvr.pas' {crossHttpSvr: TDataModule},
  uCrossTcpSvr in 'uCrossTcpSvr.pas' {crossTcpSvr: TDataModule},
  uCrossWebSckSvr in 'uCrossWebSckSvr.pas' {CrossWebSckSvr: TDataModule};
 
{$IFDEF POSIX}
procedure daemon;
begin
  try
    if WebRequestHandler <> nil then
      WebRequestHandler.WebModuleClass := WebModuleClass;
    TUnidacPool.SetDBParams;
    Log := TLog.Create;
    uPlugHelp.LoadPlugs;
//  ynWebServices := TynWebServices.Create(nil);
//  crossTcpSvr := TcrossTcpSvr.Create(nil);
    crossHttpSvr := TcrossHttpSvr.Create(nil);
//  CrossWebSckSvr := TCrossWebSckSvr.Create(nil);
    repeat
      sleep(10000);
    until False;
  finally
    if idTcpSvr <> nil then
      FreeAndNil(idTcpSvr);
    if idHttpSvr <> nil then
      FreeAndNil(idHttpSvr);
    if ynWebServices <> nil then
      FreeAndNil(ynWebServices);
    if crossHttpSvr <> nil then
      FreeAndNil(crossHttpSvr);
    if crossTcpSvr <> nil then
      FreeAndNil(crossTcpSvr);
    if CrossWebSckSvr <> nil then
      FreeAndNil(CrossWebSckSvr);
    uplughelp.UnloadPlugs;
    var i: Integer;
    for i := 0 to Length(DBPoolArray) - 1 do
      FreeAndNil(DBPoolArray[i]);
    FreeAndNil(log);
  end;
end;
var pid: Cardinal;
{$ENDIF}
 
begin
  {$IFDEF MSWINDOWS}
  if WebRequestHandler <> nil then
    WebRequestHandler.WebModuleClass := WebModuleClass;
  TUnidacPool.SetDBParams;
  Log := TLog.Create;
  uPlugHelp.LoadPlugs;
  //idHttpSvr, crossHttpSvr,要绑定不同的端口,才能同时存在
//  idTcpSvr := TidTcpSvr.Create(nil);
//  idHttpSvr := TidHttpSvr.Create(nil);
//  ynWebServices := TynWebServices.Create(nil);
//  crossTcpSvr := TcrossTcpSvr.Create(nil);
  crossHttpSvr := TcrossHttpSvr.Create(nil);
//  CrossWebSckSvr := TCrossWebSckSvr.Create(nil);
  try
    Writeln('输入exit,按回车链,退出程序');
    var s: string;
    while True do
    begin
      Readln(s);
      if sametext('exit', s) then
      begin
        Break;
      end
      else
        Writeln('无法识别的命令');
    end;
  finally
    if idTcpSvr <> nil then
      FreeAndNil(idTcpSvr);
    if idHttpSvr <> nil then
      FreeAndNil(idHttpSvr);
    if ynWebServices <> nil then
      FreeAndNil(ynWebServices);
    if crossHttpSvr <> nil then
      FreeAndNil(crossHttpSvr);
    if crossTcpSvr <> nil then
      FreeAndNil(crossTcpSvr);
    if CrossWebSckSvr <> nil then
      FreeAndNil(CrossWebSckSvr);
    uplughelp.UnloadPlugs;
    var i: Integer;
    for i := 0 to Length(DBPoolArray) - 1 do
      FreeAndNil(DBPoolArray[i]);
    FreeAndNil(log);
  end;
  {$ENDIF}
  {$IFDEF POSIX}
  pid := fork;
  if pid = 0 then
   begin
    writeln('starting service');
    daemon;
   end;
  {$ENDIF}
end.

  

1)将中间件部署文件复制到 /usr/yn/ 目录

2)创建并编辑/usr/lib/systemd/system/yn.service文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[UNIT]
#服务描述
Description=ynCrossMiddleWare
#指定了在systemd在执行完那些target之后再启动该服务
After=MiddleWare
 
[Service]
#定义Service的运行类型,一般是forking(后台运行)  
Type=forking
 
#定义systemctl start|stop|reload *.service 的执行方法(具体命令需要写绝对路径)
#注:ExecStartPre为启动前执行的命令
ExecStart=/usr/yn/ynCrossServer -start
ExecReload=/usr/yn/ynCrossServer -reload
ExecStop=/usr/yn/ynCrossServer -stop
 
#创建私有的内存临时空间
PrivateTmp=True
 
[Install]
#多用户
WantedBy=multi-user.target

  重载系统服务:systemctl daemon-reload

人工启动服务:systemctl start yn.service
人工停止服务:systemctl stop yn.service
人工重启服务:systemctl reload yn.service

设置开机启动:systemctl enable yn.service

 

posted @   delphi中间件  阅读(835)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示