![如果另一个实例已在运行,如何阻止 cronjob 执行?](https://linux22.com/image/1067439/%E5%A6%82%E6%9E%9C%E5%8F%A6%E4%B8%80%E4%B8%AA%E5%AE%9E%E4%BE%8B%E5%B7%B2%E5%9C%A8%E8%BF%90%E8%A1%8C%EF%BC%8C%E5%A6%82%E4%BD%95%E9%98%BB%E6%AD%A2%20cronjob%20%E6%89%A7%E8%A1%8C%EF%BC%9F.png)
我想在直播时自动录制流,因此我想设置一个 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"