有没有办法使用 cron 重新启动 pm2 进程,但前提是它尚未运行?

2024-02-12

我想通过 PM2 重新启动我的 Node.Js 应用程序

pm2 restart app.js

使用 crontab 但仅当应用程序尚未运行时(例如,如果我的服务器崩溃并重新启动并且 pm2 没有重新启动)。

即使它正在运行,上面的命令也会重新启动它。

我如何解决它?

UPDATE

如果我的应用程序已经在运行,我不希望它重新启动。我想让它重新启动only如果它被列为“已停止”或者它没有运行。 有些建议建议编写一个 bash 脚本,但它会是什么?我尝试了下面的选项,但它们要么不起作用,要么即使应用程序正在运行也会重新启动。


更好的方法是使用pm2 startup command

http://pm2.keymetrics.io/docs/usage/startup/ http://pm2.keymetrics.io/docs/usage/startup/

要获取为您的计算机自动配置的启动脚本,您需要键入以下命令:

# Detect available init system, generate configuration and enable startup system
pm2 startup

如果您愿意,您可以指定自己使用的平台(其中平台可以是上面引用的平台之一):

pm2 startup [ubuntu | ubuntu14 | ubuntu12 | centos | centos6 | arch | oracle | amazon | macos | darwin | freebsd | systemd | systemv | upstart | launchd | rcd | openrc]

此命令的输出可以是复制/粘贴行的建议,其中包含为您配置的所有环境变量和选项。

Example:

[PM2] 您必须以 root 身份运行此命令。执行以下命令: sudo su -c "env PATH=$PATH:/home/unitech/.nvm/versions/node/v4.3/bin pm2 启动 -u --hp

您只需复制/粘贴 PM2 为您提供的行,启动脚本就会为您的操作系统进行配置。

一旦你运行sudo pm2 startup。它将创建systemctl service。您可以使用以下命令检查相同的状态

systemctl status pm2-root

默认情况下,该服务未配置为自动重新启动。您将运行以下命令

sudo mkdir -p /etc/systemd/system/pm2-root.service.d

然后创建一个文件名10_auto_restart_pm2.conf包含以下内容

[Service]
Restart=always
RestartSec=3

之后执行

systemctl daemon-reload
systemctl restart pm2-service

现在我们来测试一下自动重启部分

$ systemctl status pm2-root.service
● pm2-root.service - PM2 process manager
   Loaded: loaded (/etc/systemd/system/pm2-root.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/pm2-root.service.d
           └─10_auto_restart_pm2.conf
   Active: active (running) since Wed 2018-02-28 16:52:19 UTC; 11s ago
     Docs: https://pm2.keymetrics.io/
  Process: 5014 ExecStop=/usr/local/lib/node_modules/pm2/bin/pm2 kill (code=exited, status=0/SUCCESS)
  Process: 5022 ExecStart=/usr/local/lib/node_modules/pm2/bin/pm2 resurrect (code=exited, status=0/SUCCESS)
 Main PID: 5031 (PM2 v2.10.1: Go)
    Tasks: 9
   Memory: 24.3M
      CPU: 460ms
   CGroup: /system.slice/pm2-root.service
           └─5031 PM2 v2.10.1: God Daemon (/home/vagrant/.pm2)

现在我们手动杀死进程并等待3秒

$ kill -9 5031
$ sleep 3
$ systemctl status pm2-root.service
● pm2-root.service - PM2 process manager
   Loaded: loaded (/etc/systemd/system/pm2-root.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/pm2-root.service.d
           └─10_auto_restart_pm2.conf
   Active: active (running) since Wed 2018-02-28 16:52:55 UTC; 641ms ago
     Docs: https://pm2.keymetrics.io/
  Process: 5057 ExecStop=/usr/local/lib/node_modules/pm2/bin/pm2 kill (code=exited, status=0/SUCCESS)
  Process: 5081 ExecStart=/usr/local/lib/node_modules/pm2/bin/pm2 resurrect (code=exited, status=0/SUCCESS)
 Main PID: 5088 (PM2 v2.10.1: Go)
    Tasks: 9
   Memory: 24.3M
      CPU: 461ms
   CGroup: /system.slice/pm2-root.service
           └─5088 PM2 v2.10.1: God Daemon (/home/vagrant/.pm2)

如您所见,进程/服务已自动重新启动。不需要 cron,这就是你应该做的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法使用 cron 重新启动 pm2 进程,但前提是它尚未运行? 的相关文章

随机推荐

  • 在R中将长数据重塑为宽数据[重复]

    这个问题在这里已经有答案了 我正在尝试重塑 R 中的一些用户数据 我有一个会话 ID 的 data frame 每个会话都有一个 User ID 和日期 我想使用 User ID 变量作为我的 密钥 但仅限于 userType 为 新访客
  • 缩放时如何保持d3正交投影居中

    我正在尝试复制 Jason Davies 旋转世界 可视化中显示的缩放功能 https www jasondavies com maps rotate https www jasondavies com maps rotate 我可以旋转和
  • 即使表单没有焦点也拦截按键

    我构建了一个 winforms 应用程序 通过重写 ProcessCmdKey 方法来检查 CTR ALT S 和 CTRL ALT E 按键 这很好用 但如果屏幕保护程序继续运行然后关闭 则表单不会获得焦点 并且按键不会被拦截 即使表单没
  • 如何在 Nuxt 3 中添加脚本块到头部?

    我只是想添加一个script块在head tag Example 我花了几个小时来找出解决方案 解决像这样简单的问题 关于添加有很多答案inline脚本 但没有脚本block for Nuxt 3 我们怎样才能做到这一点Nuxt 3 好吧
  • 在同一个for循环中遍历django模板中的多个列表

    我想在同一个 for 循环中遍历 django 模板中的多个列表 我该怎么做 一些想法链接到这里 for item1 item2 item3 in list1 list2 list3 item1 item2 item3 endfor 这样的
  • 使用scikit-learn(sklearn),如何处理线性回归的缺失数据?

    我尝试了这个 但无法让它适用于我的数据 使用 Scikit Learn 对时间序列 pandas 数据框进行线性回归 https stackoverflow com questions 29748717 use scikit learn t
  • Facebook 聊天 API - php

    我已经成功通过 xmpp 协议登录 Facebook 我使用了 facebook 文档中提供的 PHP 代码
  • 自定义ipython笔记本的欢迎页面

    我可以自定义 iPython 笔记本服务器 版本 2 3 的登录页面吗 我的意思是 在起始页 类似于 http localhost 8888 tree 我想显示欢迎来到 John Doe 的 i Py 笔记本或修改现有横幅 这可能吗 您可以
  • Mac OS X /bin/bash:python:在某些 IDE 中找不到命令

    当我编译的时候test py 一个非常简单的Python文件 在Sublime Text或CodeRunner中 我收到错误 bin bash python command not found 然后我输入python test py在终端应
  • Swing Worker 模态对话框不会关闭

    我有一个 SwingWorker 线程 它启动一个模式对话框 从侦听启动的 StateValue 的属性更改侦听器 并且 swing 工作线程继续执行其工作 但是 看起来 did 方法没有被调用 因为它是在 EDT 上调用的 但 swing
  • Numpy 数组到 TFrecord

    我正在尝试通过张量流对象检测 API 训练自定义数据集 数据集包含 40k 训练图像和标签 采用 numpy ndarray 格式 uint8 训练数据集形状 2 40000 23456 和标签形状 1 0 3 我想为此数据集生成 tfre
  • 如何升级pip3?

    I want to use python3 5 for development but many times when I install the module for python 3 5 it always fails The term
  • 派生类型中的可变长度数组

    我主要使用 Python 进行科学编程 并没有大量的 Fortran 90 95 经验 对于我的一个项目 我想定义一个派生类型并为该类型重载一堆运算符 至关重要的是 我希望派生类型的变量之一成为可变长度的数组 至少 我在代码的不同部分需要两
  • 删除 tar 生成的尾随空字符

    我正在尝试压缩一些文件并通过 php passthru 命令将它们传递给用户 问题是 尽管 tar 文件应该只有 2k 大小 但它始终是 10240 有趣的数字对吗 所以我把它分解为 sh 4 1 tar czf test wc c 102
  • iPhone 上针对 RTL 语言的翻转布局

    这是我的问题 我已将我的应用程序本地化为阿拉伯语 它实际上与常规本地化略有不同 因为我有不同的目标 每种语言一个 在模拟器上 由于自动布局和约束的前导 尾随部分 视图被正确翻转 但我似乎无法在设备上获得相同的结果 AutoLayout RT
  • bash 创建带有序列号的目录

    我正在创建一个在 OS X 上运行的脚本 该脚本将由新手用户经常运行 因此希望通过每次创建一个新的目录结构并在最后一个上使用 n 1 来保护目录结构 target001下一次运行创建target002 到目前为止我有 lastDir fin
  • 重置按钮处理点击后执行 Javascript 操作

    如何立即执行某项操作after an
  • EF Core 查询存储过程映射到类型

    我有一个项目需要查询数据库并将结果返回到 Web api 有几个由数据库管理员即时创建的存储过程 它们有一个 UI 用于创建存储过程的定义及其名称 而 Web API 服务仅调用该 SP 并应返回结果 根据下面的代码 我无法将返回对象获取到
  • 我在 for 循环中使用 let 关键字给出了语法错误:意外的标识符

    我在 for 循环中使用 let 关键字 如下所示 for let methd1 in servUrl let methd methd1 for let pth1 in servUrl methd let pth pth1 app meth
  • 有没有办法使用 cron 重新启动 pm2 进程,但前提是它尚未运行?

    我想通过 PM2 重新启动我的 Node Js 应用程序 pm2 restart app js 使用 crontab 但仅当应用程序尚未运行时 例如 如果我的服务器崩溃并重新启动并且 pm2 没有重新启动 即使它正在运行 上面的命令也会重新