如何使用bash中的while循环自动安排任务?

时间:2016-02-07 08:40:00

标签: linux bash

我正在尝试安排我的脚本在两个不同的时间运行,然后继续在后台运行,等待下次再次满足条件。

到目前为止,我无法做到这一点,因为在满足一个条件后,这些脚本会自动退出:

function schedule {

while :
do
    hour=$(date +"%H") 
    minute=$(date +"%M")

    if [[ "$hour" = "02" && "$minute" = "31" ]]; then
        # run some script
        exec /home/gfx/Desktop/myscript.sh
        wait
        schedule

    elif [[ "$hour" = "02" && "$minute" = "32" ]]; then
        # run some script
        exec /home/gfx/Desktop/myscript.sh
        wait
        schedule
    fi 

done

}

schedule

我执行的脚本如下:

$cat myscript.sh
echo "this a message"

欢迎任何想法或评论,谢谢!

2 个答案:

答案 0 :(得分:2)

当你这样做时:

 exec some program
 something else

如果exec有效,那么something else将永远不会发生,因为脚本被你所执行的内容所取代

也许代替:

exec /home/gfx/Desktop/myscript.sh
wait
schedule

你想要:

/home/gfx/Desktop/myscript.sh &
wait
# schedule  -- don't make a fork bomb

如评论中所述,& + wait有点愚蠢,你可能想要:

/home/gfx/Desktop/myscript.sh &
# wait
# schedule

或:

/home/gfx/Desktop/myscript.sh
# wait
# schedule

取决于你是否想在后台使用myscript。

ALSO 你应该在循环中放一个睡眠,(也许是sleep(59))以防止它像女妖一样循环。

您开始理解我认为的cron的吸引力(至少对于您不希望与终端会话进行交互的事情而言)。

答案 1 :(得分:1)

Crontabs是放置这些东西的最佳场所。

  • 使用

    编辑crontab

    $ crontab -e

  • 将以下行添加到文件

31 2 * * *  /home/gfx/Desktop/myscript.sh

并保存crontab文件。您的脚本将每天凌晨2:31执行