咏南中间件随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 -startExecReload=/usr/yn/ynCrossServer -reloadExecStop=/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