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)。Linuxcron
允许您将31,32
放在分钟字段中,以实现OP似乎要做的事情。事实上,我在循环中调用的脚本首先会使用sendmail命令向我发送一封邮件,以了解脚本何时启动,最后,它会向我发送另一封邮件,以了解脚本何时结束,但当y使用cron执行“myscript.sh”时,它不会在脚本启动时向我发送邮件,而在脚本完成时,只发送脚本内部的其他代码,因此cron不是我的选项
/home/gfx/Desktop/myscript.sh
# wait
# schedule