使用 cronjob 移动大文件:如果下次运行时 mv 仍在运行会发生什么?

使用 cronjob 移动大文件:如果下次运行时 mv 仍在运行会发生什么?

在 Ubuntu 16.04 无头系统上,我有两个目录。我希望 cronjob 将每个文件从目录 A 移动到目录 B(相同分区、相同硬盘、相同文件系统等)。问题是/可能是:文件会非常大,并且由于某些原因,cronjob 必须经常运行,例如每分钟左右运行一次。

因此,以下场景很有可能发生:cronjob 首次启动,在目录 A 中发现一个大文件,开始将其移动到目录 B。当 mv 进程仍在运行时,cronjob 第二次执行。这会导致什么问题吗?

我找到了这个问题并回答当多个进程尝试在两个不同的文件系统之间移动同一个文件时会发生什么,但我认为这是关于同时启动的进程。我希望 cronjobs 有办法防止不必要的行为。

答案1

在 mv 进程仍在运行的情况下,cronjob 第二次执行。这会引起什么问题吗?

是的,可以。

一般来说,我建议创建一个脚本,在该脚本中放置一个互斥锁(MUTEX),如果锁存在则停止执行该脚本,并在第一个 cronjob 完成“mv”时删除该锁。

一个非常基本的例子:

if mkdir /var/lock/mylock; then
  mv your_file /to/a/directory/
  rm -rf /var/lock/mylock
else
  exit 1
fi

相关内容