Bash在给定时间内启动并终止Ubuntu进程

Bash在给定时间内启动并终止Ubuntu进程,bash,ubuntu,Bash,Ubuntu,我有这样的情况:我有一个php脚本在ubuntu终端(xfce4终端)上运行,作为控制台/进程(在php中有一个带有某个进程的循环)。 问题是:每隔两天,这个进程就会因为内存过度使用而被终止。 我需要的是:一个可以启动进程的bash脚本,每48小时它就会终止这个进程并重新启动它。最佳解决方案是修复内存泄漏,跟踪泄漏函数,并在需要帮助时发布带有相关代码的新问题 现在,对于这种特殊情况,您可以使用如下内容: while true do timeout 12h php myfile.php do

我有这样的情况:我有一个php脚本在ubuntu终端(xfce4终端)上运行,作为控制台/进程(在php中有一个带有某个进程的循环)。 问题是:每隔两天,这个进程就会因为内存过度使用而被终止。
我需要的是:一个可以启动进程的bash脚本,每48小时它就会终止这个进程并重新启动它。

最佳解决方案是修复内存泄漏,跟踪泄漏函数,并在需要帮助时发布带有相关代码的新问题

现在,对于这种特殊情况,您可以使用如下内容:

while true
do 
  timeout 12h php myfile.php
done
这是一个无限循环,它启动您的命令并在12小时后终止它。(或您想要的任何其他持续时间:30m、1d等)

一个更稳定的解决方案是创建systemd服务或使用一些流程管理器(如Supervisor或Monit)部署脚本

Supervisor有一个配置参数“autorestart”,如果您指定true,它会在每次脚本崩溃时重新启动脚本,这是一个稳定的生产就绪解决方案

来自的示例管理器配置


如果您的流程运行48小时,您想解释一下什么流程需要如此长的时间并且需要定期重新启动吗?这听起来像是一个不寻常的进程。您没有将其配置为systemd服务有什么原因吗?如果它是作为服务运行的,它将在引导时自动启动,在它死机时重新启动,您可以设置一个计时器,在需要时触发显式重启,或者只配置允许使用的最大内存量,让它死机,在超过最大内存量时重新启动……也就是说,首先,编写bash脚本是解决这个问题的错误方法。我同意@riggsfully的观点。听起来像是“我有一辆每周都有交流发电机的汽车。我需要制造一台每周六更换我汽车交流发电机的机器来解决这个问题”。内存泄漏可以修复吗?有没有其他方法可以使用cron和shell或者其他什么来完成这个php脚本所做的事情呢?我认为这是一种解决问题的方法,而不是解决问题的症状
[program:are_we_there_yet]
command=php /var/www/areWeThereYet.php
numprocs=1
directory=/tmp
autostart=true
autorestart=true
startsecs=5
startretries=10
redirect_stderr=false