Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在bash中使用while循环自动调度任务?_Linux_Bash - Fatal编程技术网

Linux 如何在bash中使用while循环自动调度任务?

Linux 如何在bash中使用while循环自动调度任务?,linux,bash,Linux,Bash,我试图将脚本安排在两个不同的时间运行,然后在后台继续运行,等待下次再次满足条件 到目前为止,我无法执行此操作,因为在满足一个条件后,此脚本将自动退出: function schedule { while : do hour=$(date +"%H") minute=$(date +"%M") if [[ "$hour" = "02" && "$minute" = "31" ]]; then # run some script

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

到目前为止,我无法执行此操作,因为在满足一个条件后,此脚本将自动退出:

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"
欢迎提出任何想法或意见,谢谢

当您这样做时:

 exec some program
 something else
如果exec工作,那么就永远不会发生
其他事情
,因为脚本将被您执行的内容替换

也许可以代替:

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
或:

取决于您是否希望myscript在后台

同样你应该在循环中加入睡眠,(也许是
sleep(59)
)来防止它像女妖一样循环


我认为,您开始理解cron的吸引力(至少对于您不想与终端会话交互的内容而言)。

crontab是放置这些内容的最佳位置

  • 使用编辑crontab

    $crontab-e

  • 将以下行添加到文件中

312***/home/gfx/Desktop/myscript.sh

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

cron出了什么问题?请看一看:该程序将成为一个fork炸弹,因为
schedule
将生成自身的其他副本。因此,虽然这是一个正确的答案,但目前也是一个危险的答案。无论如何,同意OP应该使用
cron
的共识。此外,运行后台程序,然后立即调用
wait
相当于不在后台运行它。我想他们有等待的理由。但也许不是。无论如何,更清楚地表明您不想重新调用自己(fork bomb)。Linux
cron
允许您将
31,32
放在分钟字段中,以实现OP似乎要做的事情。事实上,我在循环中调用的脚本首先会使用sendmail命令向我发送一封邮件,以了解脚本何时启动,最后,它会向我发送另一封邮件,以了解脚本何时结束,但当y使用cron执行“myscript.sh”时,它不会在脚本启动时向我发送邮件,而在脚本完成时,只发送脚本内部的其他代码,因此cron不是我的选项
/home/gfx/Desktop/myscript.sh
# wait
# schedule