如何自动停止空闲SageMaker笔记本?配置后实例无法启动求助
解决SageMaker笔记本实例空闲自动停止配置导致启动失败的问题
问题根源
你的生命周期启动脚本存在三个致命问题:
- 未定义
$DIR变量,导致crontab中指定的脚本路径无效 set -e指令会让脚本在遇到任何错误时立即终止,比如网络波动导致wget失败就会中断实例启动流程- 未给下载的脚本添加执行权限,同时crontab的默认环境变量不全,可能导致Python脚本无法正常执行
修复后的完整脚本
替换原生命周期配置的OnStart脚本为以下内容:
#!/bin/bash # 设置空闲时间阈值(单位:秒) IDLE_TIME=300 # 定义脚本和日志的完整路径 SCRIPT_PATH="/home/ec2-user/SageMaker/autostop.py" LOG_PATH="/home/ec2-user/SageMaker/auto-stop-idle.log" # 确保日志目录存在 mkdir -p /home/ec2-user/SageMaker # 下载自动停止脚本,增加重试逻辑避免网络问题 echo "下载自动停止脚本..." if ! wget -O "$SCRIPT_PATH" https://raw.githubusercontent.com/mariokostelac/sagemaker-setup/master/scripts/auto-stop-idle/autostop.py; then echo "首次下载失败,重试..." wget -O "$SCRIPT_PATH" https://raw.githubusercontent.com/mariokostelac/sagemaker-setup/master/scripts/auto-stop-idle/autostop.py fi # 赋予脚本执行权限 chmod +x "$SCRIPT_PATH" # 配置定时任务,避免重复添加 echo "配置定时任务..." (crontab -l 2>/dev/null | grep -v autostop.py; echo "*/5 * * * * /usr/bin/python3 $SCRIPT_PATH --time $IDLE_TIME >> $LOG_PATH 2>&1") | crontab - # 配置CloudWatch日志(不需要可注释此行) echo "配置CloudWatch日志..." curl https://raw.githubusercontent.com/mariokostelac/sagemaker-setup/master/scripts/publish-logs-to-cloudwatch/on-start.sh | sudo bash -s auto-stop-idle "$LOG_PATH"
核心修复说明
- 移除
set -e:改用错误重试逻辑,避免小问题导致实例启动失败 - 定义完整路径变量:替换未定义的
$DIR,确保脚本和日志路径明确 - 添加执行权限:给下载的Python脚本赋予可执行权限,避免crontab执行时出错
- 避免重复定时任务:用
grep -v autostop.py过滤已有任务,防止重复添加 - 完善日志输出:用
>> $LOG_PATH 2>&1同时捕获标准输出和错误信息,方便排查问题
验证方法
- 将修复后的脚本保存为SageMaker生命周期配置的
OnStart脚本 - 重新启动笔记本实例
- 实例启动后,登录执行
crontab -l确认定时任务已添加 - 查看
/home/ec2-user/SageMaker/auto-stop-idle.log验证脚本运行状态
内容的提问来源于stack exchange,提问作者suggula saikrishna
相关产品推荐
相关产品推荐

