第一个脚本每天上午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