如果已经运行,则不要运行 cron 任务

如果已经运行,则不要运行 cron 任务

我知道这个问题已经被问过了但是我不明白答案或者它不适用于我。

我有一个 php 脚本,我每 1 分钟使用 CPanel 调用一次来设置 Cron Job。该脚本的性质意味着它可能会超出一分钟,因此我需要知道如何在第一个脚本尚未完成时停止下一个脚本的运行。

我有一个运行 CENTOS 5.5 的 VPS,可以访问 WHM 和 CPanel。我以前从未使用过 Linux(昨天才刚刚获得服务器),所以我不知道自己在做什么,如果可能的话,我将不胜感激。如果我需要提供更多信息,请告诉我(我不知道您目前需要什么信息)。

谢谢。

答案1

请参见流程管理。您可能希望使用锁定文件。您可以使用flock例如。

为什么你不能让你的工作完成?

您的问题表示“我要么不明白答案,要么它不适用于我”,但您没有说明具体原因。请更具体一些。

答案2

使用 bash 脚本作为你的 cron 作业

定时任务

#!/bin/bash
$lockfile=/tmp/lock.file

if [ ! -e $lockfile ]; then
   touch $lockfile
   php /path/to/php/script.php
   rm $lockfile
else
   echo "script already running"
fi

答案3

文档:https://www.timkay.com/solo/

solo 是一个非常简单的脚本(10 行),可防止程序一次运行多个副本。它与 cron 一起使用可确保在前一个作业完成之前不会运行下一个作业。

例子

* * * * * solo -port=3801 ./job.pl blah blah

答案4

我很好奇,用 ps 实现某些功能是否可以解决这个问题。简单就ps -e | grep script_name.php | awk '{print $4}'足够了吗?它肯定会告诉你脚本是否正在运行,无需事先检查是否有人终止了它。创建然后删除锁定文件如何比这更好/更快?

我不确定,只是想知道利弊。谢谢

相关内容