如何修改Shell脚本实现新版本仅在9点单次通知?
解决方案
修改后的脚本可实现你要求的需求,代码如下:
NOTIFICATION_FILE="$engineversion_folder/m3.txt" if [[ $current_version != $new_version ]]; then # 先检查是否已发送过通知 if [[ ! -f "$NOTIFICATION_FILE" ]]; then current_hour=$(date +'%H') # 仅在上午9点执行通知发送并创建标记文件 if [[ $current_hour -eq 9 ]]; then aws sns publish --topic-arn "arn:aws:sns:xxxxxxxxxxxx:maintenance-test" \ --message "New Engine Version : $new_version is available for $database database." # 用touch创建空文件做发送标记,避免命令输出为空导致标记失效 touch "$NOTIFICATION_FILE" echo "Notification sent successfully!" fi else echo "Notification already sent!" fi else # 版本一致时删除记录文件,-f参数避免文件不存在时报错 rm -f "$NOTIFICATION_FILE" echo "Versions match, notification record cleared." fi
关键修改说明:
- 统一文件路径变量:用
NOTIFICATION_FILE管理记录文件路径,避免重复书写出错 - 调整判断逻辑顺序:先检查是否已发送过通知,再判断当前时间,确保9点过后即使版本仍不一致,也不会重复发送
- 改用
touch做标记:原脚本依赖aws命令的输出写入文件,若命令执行失败(如权限、网络问题)会导致标记失效,touch能稳定生成标记文件 - 优化删除命令:单个文件无需递归删除,用
rm -f避免文件不存在时抛出错误 - 增加调试提示:补充发送成功、版本匹配时的明确输出,方便排查运行状态
内容的提问来源于stack exchange,提问作者asdfcgrep_
相关产品推荐
相关产品推荐

