在一些日常工作中,常常会开发一些小工具,但是这些工具又没有类似服务的功能,服务器重启了又需要手动启动程序,这是十分麻烦的,这个时候就需要考虑开机脚本自动启动
在Linux系统中,将Node.js脚本添加到启动项通常涉及到创建一个服务或使用系统的初始化系统来实现。以下是几种常见的方法:
使用Systemd(适用于使用systemd的系统,如Ubuntu 16.04+,CentOS 7+,等)
1 创建systemd服务文件:在/etc/systemd/system/
目录下创建一个新的服务文件,例如mynodejsscript.service
。
sudo nano /etc/systemd/system/mynodejsscript.service |
2 编辑服务文件:添加以下内容,并根据需要修改ExecStart
路径和其他参数。
[Unit]
Description=My Node.js Script
After=network.target
[Service]
ExecStart=/usr/local/bin/node /data/root/deploy/client.js
Restart=always
User=root
Group=root
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/data/root/deploy/
StandardOutput=file:/data/root/deploy/client.log
StandardError=file:/data/root/deploy/client.log
[Install]
WantedBy=multi-user.target
3 重新加载systemd配置:
sudo systemctl daemon-reload
4 启用并启动服务:
sudo systemctl enable mynodejsscript
sudo systemctl start mynodejsscript
5服务配置的详细解释
当然可以,这是一个 systemd 服务单元文件,通常用于定义 Linux 系统上如何启动、停止和管理服务。以下是对文件中各部分的逐行解释:
[Unit]
-
Description=My Node.js Script
- 这行提供了服务的描述,即“My Node.js Script”。它用于描述服务的用途或内容,通常用于管理工具(如
systemctl
)在显示服务列表时提供信息。
- 这行提供了服务的描述,即“My Node.js Script”。它用于描述服务的用途或内容,通常用于管理工具(如
-
After=network.target
- 这行表示此服务应在网络目标之后启动。
network.target
是一个 systemd 的特殊目标,它表示网络子系统已经准备好。这意味着服务将等待网络完全启动后再开始。
- 这行表示此服务应在网络目标之后启动。
[Service]
-
ExecStart=/usr/local/bin/node /data/root/deploy/client.js
- 这是服务启动时执行的命令。它使用
/usr/local/bin/node
来执行/data/root/deploy/client.js
脚本。
- 这是服务启动时执行的命令。它使用
-
Restart=always
- 这表示如果服务退出,它应始终被重新启动。
always
表示无论退出状态是什么,服务都会重启。
- 这表示如果服务退出,它应始终被重新启动。
-
User=root
- 这表示服务应以
root
用户的身份运行。
- 这表示服务应以
-
Group=root
- 这表示服务应以
root
组的身份运行。
- 这表示服务应以
-
Environment=PATH=/usr/bin:/usr/local/bin
- 这行设置了服务的环境变量
PATH
,它指定了可执行文件搜索的目录。
- 这行设置了服务的环境变量
-
Environment=NODE_ENV=production
- 这行设置了另一个环境变量
NODE_ENV
,并将其设置为production
。这通常用于 Node.js 应用程序,以指示它应在生产环境中运行。
- 这行设置了另一个环境变量
-
WorkingDirectory=/data/root/deploy/
- 这行设置了服务的工作目录,即它启动时的当前目录。
-
StandardOutput=file:/data/root/deploy/client.log
- 这表示服务的标准输出(stdout)应被写入
/data/root/deploy/client.log
文件。
- 这表示服务的标准输出(stdout)应被写入
-
StandardError=file:/data/root/deploy/client.log
- 这表示服务的标准错误(stderr)也应被写入
/data/root/deploy/client.log
文件。
- 这表示服务的标准错误(stderr)也应被写入
[Install]
-
WantedBy=multi-user.target
- 这行指示 systemd 在
multi-user.target
目标被激活时启动此服务。multi-user.target
是一个系统状态,它表示系统已经准备好进行多用户操作,通常是在系统启动过程中达到的一个点。
- 这行指示 systemd 在
这个文件定义了如何管理一个 Node.js 脚本作为 systemd 服务,包括它的启动方式、用户权限、环境变量设置等。