将PM2的启动过程延迟到Cron时间

问题描述

我正在设置两个脚本,以便使用pm2在星期六在所有服务器上的下午8:00重新启动所有进程,并在每天晚上10:00在开发服务器上停止所有进程。这有助于控制正在进行的流程的资源使用,以及删除开发中不经常使用的流程。

到目前为止,我有pm2配置来防止自动重启,然后按照cron_restart时间表运行两个脚本,这些脚本以彼此分开的方式重启和停止服务。它们可以很好地协同工作,但是我需要考虑服务器何时重新启动,或者服务是否曾经关闭,我需要将其重新启动。在该初始启动时,两个服务将同时重新启动。因此,我宁愿将这两项服务的启动推迟到正确的Cron计划。我知道pm2具有restart_delay,但这似乎像sleep一样工作,并且用于重新启动,而不是初始启动。有没有人有这样的用例?

我的脚本如下:

pm2_config.json

{
  "apps" : [
    {
      "name" : "pm2restart","script" : "restart.sh","cron_restart": "0 19 * * Sat","autorestart": false,"pid_file": "~/apps/pm2appcontrol/bin/pm2restart.pid","out_file": "~/apps/logs/pm2appcontrol/pm2restart.log","error_file": "~/apps/logs/pm2appcontrol/pm2restart.log","log_date_format" : "YYYY-MM-DD HH:mm:ss"
    },{
      "name" : "pm2stop","script" : "stop.sh","cron_restart": "0 21 * * *","pid_file": "~/apps/pm2appcontrol/bin/pm2stop.pid","out_file": "~/apps/logs/pm2appcontrol/pm2stop.log","error_file": "~/apps/logs/pm2appcontrol/pm2stop.log","log_date_format" : "YYYY-MM-DD HH:mm:ss"
    }
  ]
}

这是通过脚本运行的:

#!/bin/bash

pm2 start ./pm2_config.json

配置文件中的两个脚本很简单:

#!/bin/bash

#pm2restart


for appName in $HOME/apps/* ; do
    service=$(basename "$appName")
    if [ $service != pm2apprestart ] && [ $service != haproxy ]
    then
        echo "Restarting $service"
        pm2 restart /$service/
    else
        echo "======================"
        echo "Skipping $service"
        echo "======================"
    fi
done

#!/bin/bash

#pm2stop

for appName in $HOME/apps/* ; do
    service=$(basename "$appName")
    if [ $service != pm2apprestart ] && [ $service != haproxy ]
    then
        echo "Stopping $service"
        pm2 stop /$service/
    else
        echo "======================"
        echo "Skipping $service"
        echo "======================"
    fi
done

解决方法

也许是一个非常简单的解决方案,但是在您的一个bash脚本中, sleep 不会帮助您吗?

sleep $(( $(date -j 2200 +%s) - $(date +%s) ))

date -j告诉不设置日期 2200 = 24小时时段


at 命令。尽管这确实是一次性的事情,但您应该创建cronjob来在特定时间执行脚本。

tecadmin link

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...