Linux 的 Crontab 计划任务的执行间隔如果太小,以至于一次任务还没有执行完毕,第二次任务又跟着执行,前序任务没有完成,后面的任务就会生成新的进程重复执行。

为了避免上述问题,可以使用 flock 命令设置文件锁,即任务首次执行时会生成一个锁文件,重复的任务请求不会予以执行。

举例说明

这里需要将一个目录内容归档到另外一个目录中:

rsync -ar /mnt/memory /var/data

如果直接把上述命令设置到 crontab 里面,如果归档操作的时间超过了计划任务的间隔时间,就会重复生成该任务的新进程。

使用 flock 命令:

这里可以创建一个脚本 rsync.sh 内容如下

#!/bin/sh
flock -n /tmp/rsync.lock -c 'rsync -ar /mnt/memory /var/data'

计划任务中设置执行 rsync.sh 脚本,这样就不会发生重复执行任务的问题了。