【问题标题】:Cakephp 3 shell script is staying in memory even after the job was finishedCakephp 3 shell 脚本即使在作业完成后仍保留在内存中
【发布时间】:2016-05-04 14:11:18
【问题描述】:

我有一个使用 Cron 运行的 cakephp shell 脚本

bin/cake hello >/dev/null 2>&1

我的HelloShell.phpmain() 是这样的:

public function main()
{
    $this->loadModel('Hello');
    $Hello = $this->Hello;
    $Hello->doStuff($this->args);
    return 0; // I tried to add return but it didn't help
}

HelloModel 使用另一个模型,收集一些信息并将其保存到数据库中。

我突然注意到,即使一切都已完成并且应该关闭该进程,该进程仍保留在内存中。

我在控制台中运行ps aux 并查看

p1033     607670  0.0  0.0 106100  1132 ?        Ss   23:42   0:00 /bin/sh -c /home/xxxx/public_html/bin/cake hello do_stuff >/dev/null 2>&1
p1033     607676  0.0  0.0 295656 17400 ?        S    23:42   0:00 php /home/xxxx/public_html/bin/cake.php hello do_stuff 

一段时间后,该命令的另一个副本由 cron 启动,并且它也保留在内存中,直到服务器的所有者将它们全部杀死。

我试过像这样运行一个简单的 php 脚本

for ($i = 0; $i < 10; $i++) sleep(1);

我看到它出现在进程列表中,10秒后消失。

那么,谁能告诉我 cakephp 做错了什么? 作业完成后,我应该怎么做才能防止进程留在内存中?

【问题讨论】:

  • 好吧,我发现如果我不加载任何模型而只使用无用的 for 循环 - 该过程会在 10 秒后消失。这是否意味着我对 DB 做错了什么?在模型中,我使用 ORM 方法和 ConnectionManager 进行一些查询。然后我调用 disconnect() 方法。
  • 如果我在控制台中手动运行相同的作业 - 作业完成后它不会留在内存中。

标签: php shell cakephp cron


【解决方案1】:

这是关于长 sql 脚本的。死锁或类似的东西。

【讨论】:

    猜你喜欢
    • 2013-01-22
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多