如何在EC2实例启动时自动启动Node.js Express服务器
实现EC2重启后自动启动Express服务器的步骤
下面是两种主流实现方式,优先推荐systemd(适配Amazon Linux 2、Ubuntu 16.04+、CentOS 7+等主流发行版):
方法一:使用systemd服务(推荐)
创建systemd服务配置文件
用编辑器打开新的服务文件:sudo vim /etc/systemd/system/express-server.service粘贴以下内容,注意替换项目绝对路径和node可执行文件路径(可通过
which node命令获取node路径):[Unit] Description=Express API Server After=network.target [Service] User=ec2-user # 替换为你的EC2登录用户,比如ubuntu WorkingDirectory=/home/ec2-user/project-folder-name # 替换为项目的绝对路径 ExecStart=/usr/bin/node /usr/bin/npm run server # 替换为实际的node和npm路径 Restart=always # 服务意外停止时自动重启 RestartSec=10 [Install] WantedBy=multi-user.target重载systemd配置并启用服务
执行以下命令:sudo systemctl daemon-reload sudo systemctl enable express-server.service测试服务(可选)
手动启动服务验证是否正常运行:sudo systemctl start express-server.service查看服务状态:
sudo systemctl status express-server.service若显示
active (running)则配置正常,重启EC2后服务会自动启动。
方法二:使用rc.local(适配旧版init系统)
如果你的EC2实例使用传统init系统(如CentOS 6),可采用此方法:
编辑rc.local文件
sudo vim /etc/rc.local在
exit 0之前添加以下内容,替换为你的项目绝对路径:cd /home/ec2-user/project-folder-name && npm run server &末尾的
&用于让服务在后台运行,避免阻塞系统启动流程。给rc.local添加执行权限
sudo chmod +x /etc/rc.local重启EC2后,服务会自动启动。
注意事项
- 必须使用绝对路径,不能用
./project-folder-name,因为系统启动时无默认工作目录 - 确保执行npm的用户拥有项目目录的读写权限
- 若systemd服务启动失败,可通过日志排查:
sudo journalctl -u express-server.service
内容的提问来源于stack exchange,提问作者DoArNa
相关产品推荐
相关产品推荐

