• 基于 .NET CORE + VUE 前后端项目打包,实现批处理安装,一键部署


    .NET 项目的前后端部署,网上有不少,大部分基于NSSM来部署的

    这个方法并没有问题,非常好用.但是很多都是需要 弹窗设置的.并没有详细的讲解批处理的命令方式.

    在参考了相关博客后,写一个简单的教程案例,仅供参考

    环境:

    Ngnix(非必须,如果纯后端可以忽略)

    NSSM

    关于mssm的下载,传送门: http://www.nssm.cc/download

    该前后端项目基于ZRAdmin.net,所有教程以ZRAdmin.NET为准

    复制mssn 到nginx根目录,web项目放在了html目录下

    相关批处理命令

    WEB后端

    ECHO ON
    CLS
    ECHO "******************************************************"
    ECHO "*******api项目安装, 请确认以管理员身份运行,按任意键继续*****"
    ECHO "******************************************************"
    cd /d %~dp0
    :: nssm install rq_webapi "%PROGRAMFILES%\html\zradmin\api"
    nssm install rq_webapi "%PROGRAMFILES%\dotnet\dotnet.exe"
    nssm set xx_webapi AppDirectory "%cd%\html\zradmin\api"
    nssm set xx_webapi AppParameters "ZR.Admin.WebApi.dll"
    nssm set xx_webapi Description "XXXwebAPI服务..."
    nssm start rq_webapi
    echo 当前路径为 %cd%
    pause

    前端

    ECHO ON
    CLS
    ECHO "******************************************************"
    ECHO "****Nginx服务安装...请确认以管理员身份运行,按任意键继续*****"
    ECHO "******************************************************"
    echo "停止当前服务Nginx, 如果存在"
    net stop xx_nginx
    echo "删除当前Web服务器Nginx"
    sc delete xx_nginx
    echo "开始安装Nginx"
    cd /d %~dp0
    echo 当前路径为 %cd%
    nssm install xx_nginx "%cd%\nginx.exe"
    nssm set xx_nginx Description "XXXnginx Web服务器"
    echo "按任意键启动Nginx"
    pause
    echo
    nssm start xx_nginx
    echo "服务启动完毕"
    #pause
    ::nssm remove rq_nginx

     批处理命令还有很多待完善的地方

    仅供参考

    nssm相关批处理指令

    Application Tab

    应用基础配置

    nssm set <servicename> Application <fullpath>
    nssm set <servicename> AppDirectory <directory>
    nssm set <servicename> AppParameters [args...]

    Details Tab

    服务详情

    nssm set <servicename> DisplayName <displayname>
    nssm set <servicename> Description <description>
    nssm set <servicename> Start SERVICE_AUTO_START

    启动模式清单:

    SERVICE_AUTO_START: Automatic 自动.
    SERVICE_DELAYED_AUTO_START: Delayed 自动(延时启动).
    SERVICE_DEMAND_START: Manual 手动.
    SERVICE_DISABLED: 禁用.

    Log On Tab

    登录配置,用于配置当前服务以何种身份进行进程启动,默认为LocalSystem

    nssm get <servicename> ObjectName
    nssm set <servicename> ObjectName <username> <password>
    nssm set <servicename> ObjectName <username> correct horse battery staple
    nssm set <servicename> ObjectName <username> ""

    Dependencies Tab(服务依赖)

    配置服务启动依赖项,通过配置依赖服务名称,实现服务依赖配置,配置多个依赖服务又空格分隔,既可以是写入服务的名称name,又可以使服务的显示名称displayname

    nssm set <servicename> DependOnService [servicname01] [servicename02]
    nssm set <servicename> DependOnService [service displayname01] [service displayname01]]

    Process Tab

    进程相关配置,用于设置应用程序的进程优先级和CPU的执行选择,默认情况下应用程序以正常优先级运行,并允许在所有CPU上运行,如希望进程限制为可用CPU的子集,可取消选中"所有处理器"并依据实际情况选择特定CPU

    nssm set <servicename> AppPriority NORMAL_PRIORITY_CLASS
    nssm set <servicename> AppNoConsole 0
    nssm set <servicename> AppAffinity All

    AppNoConsole设置进程是否新建控制台窗体,默认为0

    从版本 2.22 开始,nssm将默认为应用程序创建一个新的控制台窗口,允许一些程序运行,否则会失败,例如那些希望能够读取用户输入的程序

    若不需要,可以通过将 HKLM\System\CurrentControlSet\Services\servicename\Parameters 下的整数 (REG_DWORD) 值 AppNoConsole 设置为非零值来禁用控制台窗口

    AppAffinity默认设置为进程可在所有CPU上运行,可以指定对应数值,用于特定CPU上运行,连续可用-起始到终止,,逗号用于分隔不同CPU

    AppAffinity默认设置为进程可在所有CPU上运行,可以指定对应数值,用于特定CPU上运行,连续可用-起始到终止,,逗号用于分隔不同CPU

    nssm set <servicename> AppAffinity 0-4,7
    1
    进程优先级配置

    REALTIME_PRIORITY_CLASS
    HIGH_PRIORITY_CLASS
    ABOVE_NORMAL_PRIORITY_CLASS
    NORMAL_PRIORITY_CLASS
    BELOW_NORMAL_PRIORITY_CLASS
    IDLE_PRIORITY_CLASS
    ————————————————

    ShutDown Tab

    停止服务,配置服务停止时,相关停止操作

    nssm set <servicename> AppStopMethodSkip 0
    nssm set <servicename> AppStopMethodConsole 1500
    nssm set <servicename> AppStopMethodWindow 1500
    nssm set <servicename> AppStopMethodThreads 1500

    AppStopMethodSkip对应属性设置是否选择,默认为0

    配置值清单

    1 - Don’t send Control-C to the console.
    2 - Don’t send WM_CLOSE to windows.
    4 - Don’t send WM_QUIT to threads.
    8 - Don’t call TerminateProcess().

    Exit actions Tab

     退出操作配置,用于调整服务退出时的重启限制和默认操作,还可以指定应用程序自动重新启动之间的强制延迟

    nssm set <servicename> AppThrottle 1500
    nssm set <servicename> AppExit Default Restart
    nssm set <servicename> AppRestartDelay 0

    AppThrottle意外退出,延时重启的时间间隔

    为避免 CPU 资源紧张,若受监控的应用程序在启动后意外退出,nssm将限制服务的重新启动

    默认情况下,使用1500毫秒的阈值,要指定不同的值,需创建一个整数 (REG_DWORD) 值 HKLM\System\CurrentControlSet\Services\servicename\Parameters\AppThrottle 并将其设置为所需的毫秒数

    AppExit为要配置应用程序退出时nssm应采取的操作,需编辑键 HKLM\System\CurrentControlSet\Services\servicename\Parameters\AppExit 的默认值

    若nssm运行时注册表中不存在该键,它将创建它并将值设置为重新启动。 将其更改为忽略或退出以指定所采取的操作

    nssm只会在此密钥不存在时创建它, 用户的更改不会被覆盖,对应注册表内容如下

    Default Restart(Restart application)
    Ignore(No action)
    Exit(Stop service)
    Suicide(Fack crash)

    I/O Tab

    配置文件输出/输出路径,一般为系统异常和日志运行输出日志

    nssm set <servicename> AppStdin [filepath]
    nssm set <servicename> AppStdout [filepath]
    nssm set <servicename> AppStderr [filepath]

    >nssm set Frpc AppStderr C:\games\frpc\service.log

    File rotation Tab

    可与I/O设置结合使用,用于配置服务重启时输出文件的轮换操作

    nssm set <servicename> AppStdoutCreationDisposition 4
    nssm set <servicename> AppStderrCreationDisposition 4
    nssm set <servicename> AppRotateFiles 1
    nssm set <servicename> AppRotateOnline 0
    nssm set <servicename> AppRotateSeconds 86400
    nssm set <servicename> AppRotateBytes 104856

    AppStdoutCreationDisposition输出CreationDisposition的参数值

    AppStderrCreationDisposition异常输出CreationDisposition的参数值

    AppRotateFiles是否开启文件轮换操作,1标识启用,0表示取消

    AppRotateOnline是否在服务运行时动态轮换日志文件

    AppRotateSeconds轮换文件触发时间间隔数

    AppRotateBytes轮换文件触发的单文件大小阀值
    ————————————————

    Environment Tab

     

    可用于指定要传递给应用程序的以换行符分隔的环境变量列表

     
    nssm set <servicename> AppEnvironmentExtra JAVA_HOME=C:\java
    nssm set <servicename> AppEnvironmentExtra CLASSPATH=C:\Classes TEMP=C:\Temp

    例如,获取环境变量

    >nssm get <servicename> AppEnvironmentExtra CLASSPATH
    C:\Classes
  • 相关阅读:
    关于初学者Could not find action or result :No result defined for action com.lyw.action.LoginAction and result success
    tomcat运行时候出现java.net.BindException: Address already in use: JVM_Bind错误解决方法
    关于jQuery中环境配置中的问题
    myeclicps开发web时候复制一个工程改名字后执行出现404错误
    非正常关闭myeclicps后,出现错误Errors occurred during the build.的解决方法
    【软件工程】读《人月神话》有感
    【软件工程】一个学期软件工程课的感想
    【软件工程】“谁是卧底”之NABC分析
    [软件工程] 查找二维数组最大子数组的之和 郭莉莉&李亚文
    【软件工程】软件开发方法综述
  • 原文地址:https://www.cnblogs.com/MarsPanda/p/16359916.html
Copyright © 2020-2023  润新知