【问题标题】:bash script for cron task minutely用于 cron 任务的 bash 脚本
【发布时间】:2013-02-04 17:43:48
【问题描述】:

我有一个 Paas cron 服务,它只运行每分钟、每小时、每天、每周。我希望我的脚本在上午 8 点、上午 9 点、上午 10 点、上午 11 点、下午 4 点和下午 5 点每 15 分钟运行一次。我怎么做。这是我不工作的 bash 脚本。

#!/bin/bash
MINUTES=`date +%M`
HOUR=`date +%H`
for j in "08" "09" "10" "11" "13" "16" "17";do
    if [ "$HOUR" == "$j" ];then
    for i in "00" "15" "30" "45";do
        if [ "$MINUTES" == "$i" ];then
            (
            /usr/bin/notify-send "Script is running at "
            )
        fi
    done
    fi
done

【问题讨论】:

  • 你可以不使用cron吗?为什么需要使用bash来调度脚本?
  • 尝试使用只执行通知发送的脚本(每分钟),从 cron 服务运行时是否有效? (字符串比较应该是=,而不是==,而date +'%H %M'|read HOUR MINUTES 将消除两个date 调用之间时间换行的潜在问题。
  • @AntonKovalenko 喜欢这样吗? pastie.org/6040989 。已经测试过了,但没有任何反应。
  • 你测试过只做notify-send 一个人吗?如果什么也没发生,那么您的问题是 notify-send 而不是循环和 ifs。

标签: linux bash ubuntu cron


【解决方案1】:

为什么不直接使用 crontab 的功能呢?

将此行添加到 crontab 中

*/15 8,9,10,11,16,17 * * * /path/bin/yourscript.sh

【讨论】:

    【解决方案2】:

    我会看类似的东西(由cron 每分钟运行一次):

    #!/usr/bin/bash
    
    # Exit if hour not valid.
    
    hh=$(date +%H) ; hhn=${hh##0}
    
    if [[ $hhn -lt 8  ]] ; then exit ; fi
    if [[ $hhn -gt 17 ]] ; then exit ; fi
    if [[ $hhn -eq 12 ]] ; then exit ; fi
    if [[ $hhn -eq 14 ]] ; then exit ; fi
    if [[ $hhn -eq 15 ]] ; then exit ; fi
    
    # Exit if not multiple of 15 minutes.
    
    mm=$(date +%M) ; mmn=${mm##0} ; ((mm15 = mmn % 15))
    if [[ $mm15 -ne 0 ]] ; then exit ; fi
    
    # Otherwise do something.
    
    echo Doing something at $hh:$mm
    

    这样做的好处是不用做很多循环来检查你是否应该运行。

    ${hh##0} 构造只是从小时中删除任何前导零,因此 08 和 09 可以用于算术比较,而不会被视为无效的八进制(分钟同上)。

    如果小时和/或分钟应该阻止运行,则所有if 语句都会过早地从脚本中退出。分钟更简单,因为它是模 15 计算。

    【讨论】:

    • pastie.org/6041109 使用这个,但只回显最后一部分,而不是在 15 分钟内。
    • @Shafiq,您的粘贴代码不正确,您已将最终出口更改为回显,这意味着它将在这些时间里每分钟运行一次。根据您的代码,这与您的意图不符。
    • 我已经移除了回声,但它仍然没有做任何事情。
    • @ShafiqMustapa,我假设当您删除 echo 时,您将替换为您实际想要在给定时间运行的代码。否则,你是对的,它将什么都不做。例如,如果您想发送邮件,您可以使用mailx 插入一行来发送它。就目前而言,我给了你在给定时间做某事的框架——你必须添加你真正想要做的事情。
    猜你喜欢
    • 1970-01-01
    • 2014-01-14
    • 2014-06-03
    • 1970-01-01
    • 2013-06-20
    • 2022-09-26
    • 2011-08-15
    • 2013-11-26
    • 2012-10-22
    相关资源
    最近更新 更多