You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ubuntu 18.04服务器重启时自动运行PM2?

Ubuntu 18.04下PM2无法随服务器重启自动运行,但脚本中其他命令正常执行

我希望服务器重启时PM2能自动运行,但该功能无法实现,不过脚本中的mkdir命令可正常执行。服务器系统为Ubuntu 18.04。

相关配置文件

myscript.service

[Unit]
Description=My Script
After=network.target

[Service]
ExecStart=/usr/local/bin/myscript.sh
Restart=always

[Install]
WantedBy=default.target

myscript.sh

#!/bin/bash

# Wait for the system to fully initialize
sleep 30

# Change to the node directory
cd /var/www/html/node/sms-management-system
/usr/bin/pm2 start app.js --name "SMS" -o ./sms.log -e ./sms.log --merge-logs
/usr/bin/pm2 save

cd /var/www/html/React/sms-management-system
/usr/bin/pm2 start npm -- start --name "React-Sms" -o ./react_sms_O.log -e ./react_sms_E.log --merge-logs
/usr/bin/pm2 save

# Start the PM2 service
/usr/bin/pm2 startup ubuntu

# Change to the html directory
cd /var/www/html/
mkdir ererere

# Save the PM2 configuration again to include the new process
/usr/bin/pm2 save

问题分析与解决方案

核心问题

你的配置存在3个关键问题导致PM2无法开机自启:

  1. pm2 startup ubuntu是一次性初始化命令,重复在开机脚本中执行会生成无效/冲突的systemd配置
  2. PM2的开机自启依赖自身生成的专属systemd服务,而非自定义脚本间接启动进程
  3. 脚本中PM2启动命令的参数顺序错误,且重复执行pm2 save会干扰配置文件

步骤1:修复启动脚本

修改/usr/local/bin/myscript.sh,移除冗余命令并修正参数顺序:

#!/bin/bash

# 等待系统与网络完全就绪
sleep 30

# 启动Node后端服务
cd /var/www/html/node/sms-management-system
/usr/bin/pm2 start app.js --name "SMS" -o ./sms.log -e ./sms.log --merge-logs

# 启动React前端服务(修正参数顺序:--name需放在npm之后、-- start之前)
cd /var/www/html/React/sms-management-system
/usr/bin/pm2 start npm --name "React-Sms" -- start -o ./react_sms_O.log -e ./react_sms_E.log --merge-logs

# 保存当前PM2进程列表到配置文件
/usr/bin/pm2 save

# 保留测试用mkdir命令
cd /var/www/html/
mkdir -p ererere

步骤2:正确配置PM2开机自启

  1. 手动执行一次PM2初始化命令,生成专属systemd服务(替换your-user为实际运行PM2的用户名,root运行则去掉-u和--hp参数):
    sudo /usr/bin/pm2 startup ubuntu -u your-user --hp /home/your-user
    
  2. 保存当前PM2进程配置:
    sudo /usr/bin/pm2 save
    
  3. 验证PM2服务状态:
    sudo systemctl status pm2-your-user
    
    确认服务处于active (running)状态

步骤3:调整自定义systemd服务(可选)

如果需要保留myscript.service,修改配置确保权限与依赖正确:

[Unit]
Description=My Script
After=network.target pm2-your-user.service

[Service]
User=your-user
WorkingDirectory=/var/www/html
ExecStart=/usr/local/bin/myscript.sh
Restart=always

[Install]
WantedBy=multi-user.target

步骤4:重启验证

  1. 重载systemd配置:
    sudo systemctl daemon-reload
    
  2. 启用并启动自定义服务(若保留):
    sudo systemctl enable --now myscript.service
    
  3. 重启服务器后,检查PM2进程:
    pm2 list
    

内容的提问来源于stack exchange,提问作者omkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 19:27:27