我编写了一个程序,将大量小文件写入临时目录,然后通过程序内部调用删除临时目录。该程序通过用户级 cron 作业调用,临时目录及其包含的所有文件都具有标准权限,我作为所有者。一年多以来,这在我的系统(Linux Mint 19.3)上一直有效,直到最近我发现删除过程(一个称为 shell 命令的程序)rm -rf dir
不再删除目录及其内容。我尝试在rm -rf dir
cron 作业末尾添加一个附加内容,但奇怪的是这也失败了。文件夹中有太多临时文件,无法通过删除目录内的临时文件rm *
。这些文件位于我计算机的第二个驱动器上,不同于根驱动器,其格式化为 BTRFS。我使用 Bash 作为 shell。
当我第一次注意到这个问题时,我尝试使用相同的 rm 命令手动删除该文件夹,但奇怪的是它出错了,提示找不到 shell 命令(这毫无意义)。打开另一个 shell 实例并执行完全相同的命令,没有出现错误。我注意到这一点,因为它可能与当前的问题有关。从那以后,我再也没有遇到过这个问题,并使用 timeshift 恢复操作系统,认为可能是磁盘损坏或内核错误。然而,即使采取了所有这些措施,问题仍然存在。
这个问题很奇怪,因为我可以手动删除该文件夹rm
,但无法像以前那样在 cron 作业中执行此操作,无论是通过我正在运行的程序调用的命令,还是通过程序运行后的明确命令来删除临时文件夹。
有谁知道是什么原因导致这个 cron-job 停止删除文件夹?
答案1
我现在已经解决了这个问题,但我不知道为什么或是什么导致了它。在 cron 作业中,我使用以下命令调用后续命令:&&而不是;。由于程序中的 shell 命令失败,因此后续命令从未被调用。在注释掉失败的命令并重新编译后,添加的R M作品。
我使用 C++17 调用系统()如果这对任何人来说都有帮助的话,这就是导致失败的原因。