我的任务是修复一个供应商的程序,该程序在某些情况下会将大量垃圾文件转储到日志目录中。它最终会填满用户的机器。我的任务是弄清楚如何让它停止无需任何源代码或额外的运行进程,并且不会让程序崩溃。换句话说,我希望使用文件系统的一个功能来控制增长。
我的一个想法是创建一个从该文件夹到 NUL 的硬链接,就像在 Linux 世界中一样/dev/null
。但是,我尝试使用该mklink
程序创建连接,结果出现了一条消息,内容是Local volumes are required to complete the operation.
关于如何完成连接,或者有其他解决问题的想法,您有什么想法吗?
答案1
不可以。硬链接仅在 NTFS 内部可用,并且 NUL 文件不是 NTFS 文件 - 它是 \.\Devices\NULL 命名空间对象的 WIN32 名称,但您不能创建指向它的硬链接。
如果您愿意,您可以创建指向 NUL 文件的软链接(快捷方式),但我真的不明白为什么这是一个好主意。
答案2
我只是在这里提出一些想法,但是:
如果问题程序有命令行开关,也许可以将其关闭。我会先询问供应商,假设你可以这样做,但还没有。
如果供应商程序发出某种 Windows 读取的系统事件,也许您可以编写一个删除垃圾文件夹的脚本(批处理、cmd 或 powershell)。如果可能的话,请记住等到供应商程序完成转储。
最后的办法是设置一个计划任务,在 Windows 注销时删除。这要求客户端计算机有足够的空间让垃圾在会话期间存在。
如果客户端是服务器,因此无需注销,请将其设置为运行,例如每 24 小时运行一次,或者将发生频率除以 2。除以 2 是为了减少双重垃圾的机会。
答案3
如果你可以说服程序将其日志文件写入驱动器号的根目录,例如 T:,请尝试
subst T: NUL:
因为重定向到位存储桶可以工作,例如像这样的工作:
echo > T:\some_file
什么惯于工作是从假 T: 驱动器读取数据、创建文件夹和访问文件。这有点道理,但也许你的应用程序依赖这些。
答案4
如果您不需要有问题的日志文件并且路径/名称是已知变量,请尝试以 root/特权用户身份将其创建为只读文件以阻止其创建。
或者,您可以创建一个只读卷/分区或有限大小的 ramdisk,并将其符号链接到该卷/分区或 ramdisk,以限制文件的大小。
如果程序确实需要日志文件继续运行,并且在无法写入时出现“kasplodes”,那么如果您无法将管道设置为空,则可能需要程序化解决方案,例如日志轮换。