使用 pm2 延迟进程启动直到 cron 时间
Delay start of process with pm2 until cron time
我正在设置两个脚本以使用 pm2 在星期六 8:00pm 在所有服务器上重新启动所有进程,并在开发服务器上每天在 10:00pm 停止所有进程。这是为了帮助控制正在进行的进程的资源使用,以及删除在开发中不经常使用的进程。
到目前为止,我有 pm2 配置来防止自动重启,然后 运行 两个脚本 cron_restart 计划,它们重启和停止服务,它们之间有一定的间隔。它们可以很好地协同工作,但我需要考虑服务器何时重新启动,或者服务是否出现故障而我需要将其重新启动;在初始启动时,两个服务将同时重新启动。因此,我宁愿将这两项服务的启动延迟到它们正确的 Cron 计划。我知道 pm2 有 restart_delay,但这似乎像睡眠一样工作并且用于重新启动,而不是初始启动。有没有人遇到过这样的用例?
我的脚本如下:
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 * * *",
"autorestart": false,
"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 命令。尽管这确实是 one-time 事情,但您应该创建一个 cronjob 来在特定时间执行脚本。
我正在设置两个脚本以使用 pm2 在星期六 8:00pm 在所有服务器上重新启动所有进程,并在开发服务器上每天在 10:00pm 停止所有进程。这是为了帮助控制正在进行的进程的资源使用,以及删除在开发中不经常使用的进程。
到目前为止,我有 pm2 配置来防止自动重启,然后 运行 两个脚本 cron_restart 计划,它们重启和停止服务,它们之间有一定的间隔。它们可以很好地协同工作,但我需要考虑服务器何时重新启动,或者服务是否出现故障而我需要将其重新启动;在初始启动时,两个服务将同时重新启动。因此,我宁愿将这两项服务的启动延迟到它们正确的 Cron 计划。我知道 pm2 有 restart_delay,但这似乎像睡眠一样工作并且用于重新启动,而不是初始启动。有没有人遇到过这样的用例?
我的脚本如下:
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 * * *",
"autorestart": false,
"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 命令。尽管这确实是 one-time 事情,但您应该创建一个 cronjob 来在特定时间执行脚本。