如何将这两个脚本组合起来,并为同一个脚本运行多个cron作业以获得不同的输出



第一个脚本每天上午11点运行一次,并通知一切正常;成功;消息

if [ $Status == "200" ]; then
echo "success"
else
echo "error"
fi

第二个脚本每30分钟运行一次,除非出现错误,否则不会打印任何内容。基本上,它每30分钟就会检查一次是否一切正常,只有在出现故障时才会通知我错误。

if [ $Status != "200" ]; then
echo "error"
fi

两个脚本的代码几乎完全相同。但我使用了两个不同的脚本,因为我在不同的时间想要不同的输出。那么,有没有办法将这两个脚本结合起来呢?

更明确地说,如果可能的话,我想要一个脚本,它可以每天上午11点发送一条成功消息,同时每30分钟运行一次,而不会一次又一次地发送成功消息,然后只在出现任何问题时发送错误消息。

在crontab中是这样的:

0 11 * * * /home/username/script1.sh
*/30 * * * * /home/username/script2.sh

每30分钟运行一次脚本。成功后,检查是否为上午11点,然后输出成功。

if [ $Status == "200" ]; then
if [ $(date +%H%M) == "1100" ]; then
echo "success"
fi
else
echo "error"
fi

注意:这正好检查上午11点。如果您的脚本可能需要超过1分钟才能到达这一点,请将时间保存在time="$(date +%H%M)"开始的某个位置,然后再检查if [ "$time" == "1100" ]


或者,如果您想在脚本之外保持不同行为的实际时间,您可以引入一个仅在上午11点运行时(或以一种方式(设置的参数,但在其他运行时不设置。

这需要您仍然有多个cron作业,但对同一脚本使用不同的参数。

0 11         * * * /home/username/script.sh yes
30 11         * * * /home/username/script.sh no
*/30 0-10,12-23 * * * /home/username/script.sh no

在脚本中,您需要检查提供的参数。

printsuccess="$1"
if [ $Status == "200" ]; then
if [ $printsuccess == "yes" ]; then
echo "success"
fi
else
echo "error"
fi

两个脚本的代码几乎完全相同。但我使用了两个不同的脚本,因为我在不同的时间想要不同的输出。那么,有没有办法将这两个脚本结合起来呢?

您应该将获取状态代码的所有复杂性放在一个脚本中。如果需要,请在包装器脚本中源代码:. ~/get-code.bash

我会做的不是包装脚本:

0,30 0-10,12-23 * * * ~/get-code || echo error
30 11         * * * ~/get-code || echo error
0 11         * * * if ~/get-code; then echo success; else echo error; fi

要返回基于Status的成功或失败,请将其放在~/get-code:的末尾

if [ "$Status" = 200 ]; then
exit 0
else
exit 1
fi

相关内容

  • 没有找到相关文章

最新更新