一、摘要
vue项目服务启动是进入到根目录,然后使用npm run dev启动环境,服务器由于重启或者网络波动等原因,会无辜的停止这个服务,如果是自己搭建的项目想自动启动,则需要搭建自启动服务。
二、操作
1. 安装nvm管理包
nvm管理包,据我目前的理解,大概就是像conda一样的一个容器,可以管理各种版本的nodejs和npm,这样就容易处理版本冲突问题。推荐下载
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
2.安装自己lock文件对应版本
lock文件就是package-lock.json,该文件中写出了一些依赖关系,系统运行的npm环境和一些依赖包的版本。
或者直接用指令查看自己测试环境npm和nodejs版本,然后安装对应版本
node -v
npm -v
我的版本是20.10.0,之前安装16版本的报错,后面查了版本问题,不符合lock文件依赖。
对应安装版本指令,见我另一个博客文章:nvm指令安装指定版本npm和nodejs
3.建立服务文件
在建立服务之前应该是已经npm install安装需要的依赖的,只是npm和nodejs的版本需要调整,多试错,总会搞定的
在文件夹/etc/systemd/system下新建文件my_proj.service
sudo nano /etc/systemd/system/my_proj.service
添加一下代码
[Unit]
Description=MyProj App Service
After=network.target
[Service]
User=ubuntu # 用户名
Group=ubuntu # 用户组
WorkingDirectory=/opt/wltz_tz # vue根路径
Environment="PATH=/home/ubuntu/.nvm/versions/node/v20.10.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" # 环境变量
ExecStart=/home/ubuntu/.nvm/versions/node/v20.10.0/bin/npm run dev # npm安装路径,绝对路径可以保证node版本一致
# Restart=always # 是否重启
[Install]
WantedBy=multi-user.target
4. 测试一下
启动服务
sudo systemctl start my_proj.service
查看服务状态
sudo systemctl status my_proj.service
如果看到是这种绿色的active字样,就是成功了
5. 设置服务自启动
sudo systemctl enable my_proj.service
三、服务脚本编写总结
服务的编写分为三部分,Unit、Service、Install,其中Service就是脚本执行的部分,
(一)服务脚本常见配置
服务配置文件的参数可以根据需要进行配置,不同的服务可能会有不同的参数,但通常包括以下一些常见参数:
1. Unit 部分:
Description:描述服务的简短说明。
After:指定服务应该在哪些目标之后启动。
2. Service 部分:
Type:指定服务的类型,如 simple、forking、oneshot 等。
ExecStart:指定启动服务的命令或脚本。
WorkingDirectory:指定服务的工作目录。
Restart:指定服务的重启策略,如 always、on-failure、never 等。
User:指定服务运行的用户。
Group:指定服务运行的用户组。
3. Install 部分:
WantedBy:指定服务应该在哪些目标之下启用。
(二)其他不常见的参数配置:
除了常见的参数之外,服务配置文件还可以包括一些其他参数,根据具体需求和服务类型可能会有所不同。以下是一些可能的其他参数:
1. Unit 部分:
Before:指定服务应该在哪些目标之前启动。
Requires:指定服务依赖的其他单元。
Conflicts:指定服务与其他单元发生冲突的情况。
2. Service 部分:
ExecStop:指定停止服务的命令或脚本。
ExecReload:指定重新加载服务配置的命令或脚本。
TimeoutStartSec:指定服务启动的超时时间。
TimeoutStopSec:指定服务停止的超时时间。
Environment:指定服务运行时的环境变量。
EnvironmentFile:指定从文件中读取环境变量。
3. Install 部分:
Also:指定与当前服务相关联的其他单元。
其他:
Documentation:提供有关服务的额外文档信息。
Alias:指定服务的别名。
CollectMode:指定服务日志的收集模式。
(三)一个服务的基本参数配置项
基本上有这些就可以运行跑通了,如果要用上ubuntu的指令,则需要加入环境配置
[Unit]
Description=Service Description
After=network.target # 可选,定义服务启动顺序
[Service]
Type=simple # 服务类型,可选值包括 simple、forking、oneshot 等
ExecStart=/path/to/executable # 启动服务的命令或脚本
WorkingDirectory=/path/to/working/directory # 可选,定义服务的工作目录
Restart=always # 可选,定义服务重启策略
User=username # 可选,定义服务运行的用户
Group=groupname # 可选,定义服务运行的用户组
[Install]
WantedBy=multi-user.target # 可选,定义服务的启动级别