【问题标题】:Reliable Start PM2 on Rasbian Jessie (Pi3)/Linux在 Raspbian Jessie (Pi3)/Linux 上可靠启动 PM2
【发布时间】:2017-07-01 03:00:40
【问题描述】:

我在启动 raspberry pi 3 时使用这些 shell 脚本之一启动 pm2(在启动期间以 root 身份执行 rc.local)

作为根用户

代码

startPm2Root() {
  #delete to avoid all pm2 issues
  rm -rf "$PM2_HOME"
  pkill -f pm2

  USER="root"
  HOME="/root"
  PM2_HOME="$HOME/.pm2"
  export USER HOME PM2_HOME
  pm2 startup systemd &

  if [ -f /home/pi/app/newVersion.tar.gz ]; then
    bash /home/pi/app/deploy.sh
  else
    pm2 kill && pm2 start /home/pi/app/processes.json &
  fi
  pm2 save
}

问题/日志

+ USER=root
+ HOME=/root
+ PM2_HOME=/root/.pm2
+ export USER HOME PM2_HOME
+ [ -f /home/pi/app/newVersion.tar.gz ]
+ pm2 startup systemd
+ pm2 save
+ pm2 kill
[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
[PM2] Init System found: systemd
Platform systemd
Template
[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target

[Service]
Type=forking
User=root
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/usr/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/root/.pm2
PIDFile=/root/.pm2/pm2.pid

ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect
ExecReload=/usr/lib/node_modules/pm2/bin/pm2 reload all
ExecStop=/usr/lib/node_modules/pm2/bin/pm2 kill

[Install]
WantedBy=multi-user.target

Target path
/etc/systemd/system/pm2-root.service
Command list
[ 'chmod +x /etc/systemd/system/pm2-root.service',
  'systemctl enable pm2-root',
  'systemctl start pm2-root',
  'systemctl daemon-reload',
  'systemctl status pm2-root' ]
[PM2] Writing init configuration in /etc/systemd/system/pm2-root.service
[PM2] Making script booting at startup...
>>> Executing chmod +x /etc/systemd/system/pm2-root.service
[DONE] 
>>> Executing systemctl enable pm2-root
[DONE] 
>>> Executing systemctl start pm2-root
[PM2] PM2 Successfully daemonized
[PM2] Stopping PM2...
[PM2][WARN] No process found
[PM2] All processes have been stopped and deleted
[PM2] PM2 stopped
+ pm2 start /home/pi/app/processes.json
[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
[DONE] 
>>> Executing systemctl daemon-reload
[DONE] 
>>> Executing systemctl status pm2-root
● pm2-root.service - PM2 process manager
   Loaded: loaded (/etc/systemd/system/pm2-root.service; enabled)
   Active: active (running) since Fri 2017-06-30 16:36:29 UTC; 199ms ago
     Docs: https://pm2.keymetrics.io/
 Main PID: 1034 (PM2 v2.5.0: God)
   CGroup: /system.slice/pm2-root.service
           └─1034 PM2 v2.5.0: God Daemon (/root/.pm2)         

Jun 30 16:36:27 grassberry pm2[1021]: [PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
Jun 30 16:36:29 grassberry pm2[1021]: [PM2] PM2 Successfully daemonized
Jun 30 16:36:29 grassberry pm2[1021]: [PM2] Resurrecting
Jun 30 16:36:29 grassberry pm2[1021]: [PM2] Restoring processes located in /root/.pm2/dump.pm2
Jun 30 16:36:29 grassberry pm2[1021]: [PM2][ERROR] No processes saved; DUMP file doesn't exist
Jun 30 16:36:29 grassberry pm2[1021]: ┌──────────┬────┬──────┬─────┬────────┬─────────┬────────┬─────┬─────┬──────────┐
Jun 30 16:36:29 grassberry pm2[1021]: │ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ watching │
Jun 30 16:36:29 grassberry pm2[1021]: └──────────┴────┴──────┴─────┴────────┴─────────┴────────┴─────┴─────┴──────────┘
Jun 30 16:36:29 grassberry pm2[1021]: Use `pm2 show <id|name>` to get more details about an app
Jun 30 16:36:29 grassberry systemd[1]: Started PM2 process manager.
[DONE] 
+---------------------------------------+
[PM2] Freeze a process list on reboot via:
$ pm2 save

[PM2] Remove init script via:
$ pm2 unstartup systemd

作为 pi

代码

startPm2Pi() {
  #delete to avoid all pm2 issues
  rm -rf "$PM2_HOME"
  pkill -f pm2

  USER="pi"
  HOME="/home/pi"
  PM2_HOME="$HOME/.pm2"
  export USER HOME PM2_HOME
  pm2 startup systemd -u pi & #also tried it without -u

  if [ -f /home/pi/app/newVersion.tar.gz ]; then
    bash /home/pi/app/deploy.sh
  else
    pm2 kill && pm2 -u pi start /home/pi/app/processes.json &
  fi
  pm2 save
}

问题

Error: connect EACCES /home/pi/.pm2/rpc.sock

看起来我有多个进程正在运行:

root@gb:/home/pi# ps -aux | grep pm2
root       946  1.8  3.4  87908 32172 ?        Sl   16:36   0:01 node /usr/bin/pm2 start /home/pi/app/processes.json
root       947  2.1  3.3  87872 31500 ?        Sl   16:36   0:01 node /usr/bin/pm2 save
root       990  1.6  2.9  81372 28096 ?        Ssl  16:36   0:01 PM2 v2.5.0: God Daemon (/root/.pm2)         
root      1034  1.5  3.0  81892 28396 ?        Ssl  16:36   0:01 PM2 v2.5.0: God Daemon (/root/.pm2)         
root      1040  1.5  2.9  81136 28160 ?        Ssl  16:36   0:01 PM2 v2.5.0: God Daemon (/root/.pm2)         
pi        1090  7.5  2.9  81520 28216 ?        Ssl  16:37   0:01 PM2 v2.5.0: God Daemon (/home/pi/.pm2) 

【问题讨论】:

  • 可能会在你杀死后添加一个睡眠,即。 pm2 kill &amp;&amp; sleep 30 &amp;&amp; pm2 start /home/pi/app/processes.json &amp;?祝你好运。
  • 没有帮助。但我想知道为什么会这样:[PM2] Restoring processes located in /root/.pm2/dump.pm2 因为我之前明确删除了它。反正我不太明白pm2 startup 的意思。也许我应该只使用startupstart 之一?

标签: linux raspberry-pi3 pm2


【解决方案1】:

到目前为止看起来很稳定,我删除了启动脚本,我认为它要么是一个(启动),要么是另一个(启动)。

startup 中删除了pi 的所有片段 sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 unstartup systemd -u pi --hp /home/piroot sudo pm2 unstartup

并将代码剥离为:

startPm2Root() {
  #delete to avoid all pm2 issues
  rm -rf "$PM2_HOME"
  pkill -f pm2

  USER="root"
  HOME="/root"
  PM2_HOME="$HOME/.pm2"
  export USER HOME PM2_HOME
  #pm2 startup systemd & <= removed this
  pm2 kill && pm2 start /home/pi/app/processes.json &
  #pm2 save <= removed this, launches a second instance somehow
}

【讨论】:

    猜你喜欢
    • 2017-03-21
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 2016-12-09
    • 2016-04-21
    • 2017-10-21
    相关资源
    最近更新 更多