删除文件时 Cronjob 没有结束
Cronjob not ending when deleting files
当我的 cronjob 运行时,它似乎没有结束。每 2 天删除一些文件是一项简单的工作。作业不会结束,它会删除文件,但不会在不重新启动的情况下释放 space。现在机器没有可用存储空间,除非重新启动。有没有其他人遇到过这种情况,如果有,您是如何 fix/resolve 的?
0 23 */2 * * /usr/bin/find "var/log/" -name "messages*" -delete
这是我的 cronjob
这意味着这些文件被其他进程使用。在 Unix 中,当您删除文件时,inode 和 space 不会被回收,只要某些进程上仍有打开的文件描述符。
您可以使用 lsof /var/log
轻松找到持有它的进程
删除文件会 unlink
文件系统目录结构中的文件,但如果文件仍处于打开状态(由 运行 进程使用),该进程仍可访问它,并且将继续占用磁盘上的 space,因此可能需要在 file-system
上清除该文件的 space 之前重新启动这些进程
您可以获得正在使用文件的进程的 PID:lsof | grep deleted
.
您可以使用他的PID检查某个进程打开了哪些文件:ls -l /proc/PID/fd
您还可以检查计算机上的锁定文件:lslocks
(cat /proc/locks
更多详细信息)。
当我的 cronjob 运行时,它似乎没有结束。每 2 天删除一些文件是一项简单的工作。作业不会结束,它会删除文件,但不会在不重新启动的情况下释放 space。现在机器没有可用存储空间,除非重新启动。有没有其他人遇到过这种情况,如果有,您是如何 fix/resolve 的?
0 23 */2 * * /usr/bin/find "var/log/" -name "messages*" -delete
这是我的 cronjob
这意味着这些文件被其他进程使用。在 Unix 中,当您删除文件时,inode 和 space 不会被回收,只要某些进程上仍有打开的文件描述符。
您可以使用 lsof /var/log
删除文件会 unlink
文件系统目录结构中的文件,但如果文件仍处于打开状态(由 运行 进程使用),该进程仍可访问它,并且将继续占用磁盘上的 space,因此可能需要在 file-system
您可以获得正在使用文件的进程的 PID:lsof | grep deleted
.
您可以使用他的PID检查某个进程打开了哪些文件:ls -l /proc/PID/fd
您还可以检查计算机上的锁定文件:lslocks
(cat /proc/locks
更多详细信息)。