Bash 定时Cron-重叠

Bash 定时Cron-重叠,bash,cron,Bash,Cron,我有一个bash脚本,它通过cron设置为每5分钟运行一次。。。有时,下一个5分钟到来,而最后一个5分钟仍在运行。当cron试图运行脚本时,如果脚本仍在运行,那么停止脚本的最佳方法是什么 看起来在我的bash脚本的开头添加这样的内容就可以了 我不知道代码要做什么,也不知道脚本的正确语法是什么 ... The third form is convenient inside shell scripts, and is usually used the following manner

我有一个bash脚本,它通过cron设置为每5分钟运行一次。。。有时,下一个5分钟到来,而最后一个5分钟仍在运行。当cron试图运行脚本时,如果脚本仍在运行,那么停止脚本的最佳方法是什么

看起来在我的bash脚本的开头添加这样的内容就可以了

我不知道代码要做什么,也不知道脚本的正确语法是什么

...
The  third form is convenient inside shell scripts, and is usually used
       the following manner:

       (
         flock -n 9 || exit 1
         # ... commands executed under lock ...
       ) 9>/var/lock/mylockfile
...
也许像这样的事情也能奏效

flock -n -e 200 || exit 1

你为什么不试试这样的东西:

#!/bin/bash
# Check whether lock file exists
if [ -e /tmp/mylockfile ]; then
  echo "Still running, exiting"
  exit
fi

# Create a lock 
touch /tmp/mylockfile

# Do stuff...

# Clean up
rm /tmp/mylockfile
这有点复杂:

#!/bin/bash

# Check whether lock file exists
iter=0
while [ -e /tmp/mylockfile ]; do
  if [ $((iter++)) -ge 60 ]; then
    echo "Timeout, exiting"
    exit
  fi
  sleep 1
done

# Create a lock 
touch /tmp/mylockfile

# Do stuff...

# Clean up
rm /tmp/mylockfile

循环等待60秒,以删除锁定文件…

为什么不尝试以下操作:

#!/bin/bash
# Check whether lock file exists
if [ -e /tmp/mylockfile ]; then
  echo "Still running, exiting"
  exit
fi

# Create a lock 
touch /tmp/mylockfile

# Do stuff...

# Clean up
rm /tmp/mylockfile
这有点复杂:

#!/bin/bash

# Check whether lock file exists
iter=0
while [ -e /tmp/mylockfile ]; do
  if [ $((iter++)) -ge 60 ]; then
    echo "Timeout, exiting"
    exit
  fi
  sleep 1
done

# Create a lock 
touch /tmp/mylockfile

# Do stuff...

# Clean up
rm /tmp/mylockfile

循环等待60秒以删除锁定文件…

管理脚本中的文件锁定。命令行参数-n意味着如果文件无法锁定,flock将失败,因此在这种情况下将调用|之后的命令。在您的示例中,数字9是用于访问在命令末尾定义的文件的文件描述符。您应该使用足够高的数字,以免干扰shell脚本中使用的其他文件。您使用将文件分配给文件描述符,>>将为您创建文件,但您需要写入权限。如果使用管理脚本中的文件锁定。命令行参数-n意味着如果文件无法锁定,flock将失败,因此在这种情况下将调用|之后的命令。在您的示例中,数字9是用于访问在命令末尾定义的文件的文件描述符。您应该使用足够高的数字,以免干扰shell脚本中使用的其他文件。您使用将文件分配给文件描述符,>>将为您创建文件,但您需要写入权限。如果你使用<强>我想你可能需要考虑一个更严肃的重新设计。考虑一下,由于某种原因,脚本需要6分钟才能完成。然后第二次迭代延迟1分钟开始,意味着第三次迭代延迟2分钟开始,以此类推,直到很快你有几百个副本等待运行,并且每当当前运行的一次迭代释放锁时,就争夺锁(无论你如何实现它)…Jup,我知道。。。你需要更多的逻辑来处理这些案件。但这只是一个例子,不是一个完整的调度解决方案。我个人会使用第一个例子,我可能会错过一些循环,但是它非常健壮……我同意,第一个例子适合我,我想你可能需要考虑一个更严重的重新设计。考虑一下,由于某种原因,脚本需要6分钟才能完成。然后第二次迭代延迟1分钟开始,意味着第三次迭代延迟2分钟开始,以此类推,直到很快你有几百个副本等待运行,并且每当当前运行的一次迭代释放锁时,就争夺锁(无论你如何实现它)…Jup,我知道。。。你需要更多的逻辑来处理这些案件。但这只是一个例子,不是一个完整的调度解决方案。我个人会使用第一个例子,我可能会错过一些周期,但它非常健壮…我同意,第一个例子很适合我