Mac OS向bcl logchain上传日志脚本疑问:sleep 1m是否可行?
关于sh环境中sleep参数的问题
在sh环境下,sleep 1m是无效的,必须替换成sleep 60,原因如下:
- POSIX标准的
sleep命令仅接受纯数字的秒数作为参数,不支持1m这类带时间单位的写法。 - macOS默认的
sh遵循POSIX标准(实际是bash以POSIX兼容模式运行),无法识别m(分钟)这类单位后缀。 - 只有
bash、zsh这类非POSIX shell的内置sleep,或是GNU版本的sleep工具,才支持1m、1h这类带单位的参数。
额外优化建议
- 避免日志重复上传:当前
log show --last 1m会每次获取最近1分钟的全部日志,两次执行之间会有重叠内容。可以记录每次执行的时间,下次用--start参数指定起始时间,比如:
#!/bin/sh last_run=$(date +%Y-%m-%d\ %H:%M:%S) while true do current_time=$(date +%Y-%m-%d\ %H:%M:%S) log show --start "$last_run" --end "$current_time" | sh bcl.sh last_run="$current_time" sleep 60 done
- 减少请求次数:逐条上传日志会产生大量HTTP请求,建议先将日志内容批量写入临时文件,再一次性上传,降低服务器压力。
内容的提问来源于stack exchange,提问作者echkourine25
相关产品推荐
相关产品推荐

