我有这种情况:我在ubuntu终端(xfce4-terminal)上运行的php中有一个脚本作为控制台/进程(在php中有一个循环,有一些进程)。问题是:每两天这个过程就会因内存过度使用而被杀死。我需要的是:一个可以启动进程的bash脚本,每隔48小时就可以杀死这个进程并重新启动它。
最佳解决方案是修复内存泄漏,跟踪泄漏功能,并在需要帮助时使用相关代码发布新问题。
现在针对这种特殊情况,您可以使用以下内容:
while true
do
timeout 12h php myfile.php
done
这是一个无限循环,它启动你的命令并在12小时后杀死它。 (或任何其他你想要的持续时间:30米,1天等)
更稳定的解决方案是使用Supervisor或Monit等流程管理器创建系统服务或部署脚本。
Supervisor有一个配置参数“autorestart”,如果你指定为true,它会在每次崩溃时重新启动你的脚本,这是一个稳定的生产就绪解决方案。
来自this post的示例主管配置
[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