如果另一个实例已在运行,如何阻止 cronjob 执行?

如果另一个实例已在运行,如何阻止 cronjob 执行?

我想在直播时自动录制流,因此我想设置一个 cronjob,每 15 分钟运行一次 youtube-dl 到该 url。

但是一旦开始录音,如何防止系统在15分钟后同时开始另一次录音?

答案1

您可以使用为此。flock 是一个用于管理锁的小型命令行工具。它的工作原理是将锁包裹在命令的执行中,并将锁的状态存储在锁文件中。

您可能希望根据以下命令创建一个 cron 作业:

flock -n /tmp/ytdlcron.lock <your youtube dl command>

flock 默认创建一个排他锁(意味着只有一个引用特定锁文件的命令会运行),并且该-n标志会导致后续作业失败,直到完成(而默认是等待,可能会导致大量作业等待运行)

答案2

另一个建议可能在更一般的情况下有用:

LOCK_FILE="/tmp/cron_job.lock"

# Check if lock file exists
if [ -f "$LOCK_FILE" ]; then
    echo "Lock file exists. Exiting."
    exit 1
fi

# Create lock file
touch "$LOCK_FILE"

# Your cron job code goes here

# Remove lock file
rm "$LOCK_FILE"

相关内容