解决通过 crontab 调用 FTP 命令行客户端未正确退出导致大量 FTP 进程滞留内存的问题

作者:wiLdGoose 发布时间:2019 年 8 月 23 日 分类:技术 Technology

前阵子写了个小脚本,用于异地备份与自动删除过期文件。使用一段时间后发现异常,表现为:

ps aux | grep ftp

通过这个命令显示有大量的 FTP 客户端进程滞留内存。一开始以为传输未结束导致,经过文件比对后发现传输确实已结束。辣么为何 FTP 进程未能自动退出呢?

网上查询后有人说使用 passive 命令,但我的脚本中已经对 FTP 命令设置了 -inp 的参数,其中参数 p 即启用被动模式传输。若再使用 passive 命令,会使 FTP 从被动模式切换回默认的主动模式,导致连接与传输失败。

权宜之计是在 crontab 中,在定时备份的任务后若干小时再执行这个任务:

for i in `ps aux | grep "ftp -inp" | grep -v grep | awk '{ print $2 }'`; do kill -9 $i; done

确实挺 low 的,Google 了半天貌似没发现还有其他不幸遭遇的同志。若有更好的解决方案,跪求留言。

标签: ftp, crontab, linux

已有 2 条评论 »

  1. druggo druggo 2019 年 8 月 23 日 22 时 33 分

    不如换lftp试试。

    1. wiLdGoose wiLdGoose 2019 年 8 月 27 日 10 时 56 分

      感谢建议。之前看过,不确定lftp对需要NAT的VPS是否友好,主要还是被动模式的坑。我抽空测试一下。再次感谢建议。

添加新评论 »