crontab + SSH 客户端,磁盘空间泄漏问题,如何解决?

crontab + SSH 客户端,磁盘空间泄漏问题,如何解决?

我正在使用 Ubuntu 18.04 LTS,但我的系统上出现了一些奇怪的问题。

在 中crontab -e,我有这样一行:

@reboot sleep 11 && sshpass -p '123456' ssh -D *:7070 socksclient@localhost

这样 ssh 客户端程序就会在系统启动时自动运行,充当端口 7070 上的 SOCK5 服务器。

但糟糕的事情发生了。我的根分区空间正在慢慢耗尽,我可以看到这种泄漏df,大约每秒 100 字节。

经过一番调查,lsof | grep deleted发现它是sshsshpass抓取[已删除的文件系统路径的文件句柄(/tmp/#16在附图中)]并不断向其中附加内容,因此它偷偷占用了我的磁盘空间。

Snap0651 lsof grep delete chh tip.png

顺便说一句:如果我sshpass -p '123456' ssh -D *:7070 socksclient@localhost从 Linux 控制台手动运行,这些(delete)条目将不会出现。

这些泄漏的磁盘空间无法通过 显示du,并且只能通过终止 ssh 或 sshpass 进程来释放。

我的问题是:我希望我的 ssh 客户端随系统启动而运行,但消除磁盘空间泄漏。如何实现?

如果有人能告诉我我将不胜感激:

  • 文件的当前大小是多少deleted
  • 我如何知道 /tmp/#16 文件中附加了什么内容(文本)?也许一些类似于进程监控在 Windows 上?

答案1

希望这有帮助。

获取持有“已删除”文件/fd 的进程的 PID 和 FD,并使用 stat/cat/peekfd 等。它必须仍在运行,因为文件甚至处于已删除状态(在活动进程下)。

$ ps uax | grep “你的进程名称” #获取PID

$ lsof -p “您找到的 PID id”#查看打开的文件和它们的 FD

$ stat /proc/${mypid}/fd/${myfd}

$ cat /proc/${mypid}/fd/${myfd}

$ peekfd /proc/${mypid}/fd/${myfd}

相关内容