詠南中間件隨LINUX開機自動啟動
LINUX DEAMON,LINUX也有類似WINDOWS的服務。
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文件
[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
