我正在使用 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
发现它是ssh
或sshpass
抓取[已删除的文件系统路径的文件句柄(/tmp/#16在附图中)]并不断向其中附加内容,因此它偷偷占用了我的磁盘空间。
顺便说一句:如果我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}