Bash 定时Cron-重叠
我有一个bash脚本,它通过cron设置为每5分钟运行一次。。。有时,下一个5分钟到来,而最后一个5分钟仍在运行。当cron试图运行脚本时,如果脚本仍在运行,那么停止脚本的最佳方法是什么 看起来在我的bash脚本的开头添加这样的内容就可以了 我不知道代码要做什么,也不知道脚本的正确语法是什么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
...
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,我知道。。。你需要更多的逻辑来处理这些案件。但这只是一个例子,不是一个完整的调度解决方案。我个人会使用第一个例子,我可能会错过一些周期,但它非常健壮…我同意,第一个例子很适合我