You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

远程运行树莓派Stretch系统bash脚本,重启后脚本中断如何续执行?

解决远程SSH脚本因树莓派重启中断的问题

嘿,作为第一年的学徒能想到用脚本自动化发布测试已经超棒了!针对你遇到的「树莓派重启直接终止远程脚本,无法继续后续流程」的问题,我有几个实用的方案,完全适配你从办公PC远程运行、传递参数的需求:

方案一:本地脚本等待树莓派恢复后,推送后续任务

这是最贴合你需求的方式——让本地启动脚本在树莓派重启后,主动检测其连通性,恢复后再推送第二阶段的测试逻辑。

具体实现步骤

  1. 拆分测试流程:把「创建flag文件+重启」放在第一阶段脚本auto_test.sh,把重启后的验证逻辑放在post_reboot_test.sh
  2. 修改本地启动脚本,在第一阶段执行完后,添加循环检测树莓派SSH连通性的逻辑,直到恢复后再执行第二阶段:
#!/bin/bash
CONFIG=/home/user/Schreibtisch/config.sh
source $CONFIG

echo "Release AutoTest V0.7 on $DEVICE_ID"
echo "Make sure an external WLAN chip is plugged in"
read -p "Press ENTER to start"

# 执行第一阶段:创建flag文件并重启树莓派
ssh root@$DEVICE_IP "bash -s" -- < /home/user/Schreibtisch/auto_test.sh "$PMD" "$BTDMD" "$AND TEN MORE PARAMETERS..."

# 等待树莓派重启恢复(用SSH检测比ping更可靠,确保服务就绪)
echo "等待树莓派重启完成..."
until ssh -o ConnectTimeout=5 root@$DEVICE_IP exit; do
    echo "树莓派尚未恢复,5秒后重试..."
    sleep 5
done

echo "树莓派已重启,开始执行后续测试..."
# 推送第二阶段脚本并执行
ssh root@$DEVICE_IP "bash -s" -- < /home/user/Schreibtisch/post_reboot_test.sh "$OTHER_PARAMETERS"

exit 0

关键细节

  • ssh -o ConnectTimeout=5 root@$DEVICE_IP exit检测:比单纯ping更准确,因为ping通不代表SSH服务已经启动完成。
  • 确保你的办公PC和树莓派之间配置了SSH密钥登录,避免脚本执行过程中弹出密码输入框导致中断。

方案二:在树莓派上临时配置@reboot cron任务(适合需要自动触发重启后逻辑的场景)

如果希望树莓派重启后自动执行后续任务,同时保留从本地传递的参数,可以在第一阶段脚本中临时添加cron任务,配合临时参数文件实现:

具体实现步骤

  1. auto_test.sh的末尾添加以下逻辑(创建flag、保存参数、配置cron、重启):
# 创建需要的标志文件
touch /path/to/flagfile1
touch /path/to/flagfile2

# 将传入的参数保存到临时文件(方便重启后读取)
echo "$1 $2 $3 ..." > /tmp/test_params.txt

# 临时添加@reboot cron任务,重启后执行后续脚本
# 注意:先备份原有cron任务,避免覆盖
(crontab -l 2>/dev/null; echo "@reboot bash /tmp/post_reboot_test.sh \$(cat /tmp/test_params.txt)") | crontab -

# 重启树莓派
reboot
  1. 本地启动脚本中,先把post_reboot_test.sh推送到树莓派的临时目录:
# 在执行auto_test.sh之前,先把后续脚本传到树莓派
scp /home/user/Schreibtisch/post_reboot_test.sh root@$DEVICE_IP:/tmp/
ssh root@$DEVICE_IP "chmod +x /tmp/post_reboot_test.sh"

# 然后执行第一阶段脚本
ssh root@$DEVICE_IP "bash -s" -- < /home/user/Schreibtisch/auto_test.sh "$PMD" "$BTDMD" "$AND TEN MORE PARAMETERS..."

# 可选:等待树莓派恢复后,清理临时文件和cron任务
until ssh -o ConnectTimeout=5 root@$DEVICE_IP exit; do
    sleep 5
done
ssh root@$DEVICE_IP "crontab -l | grep -v '@reboot bash /tmp/post_reboot_test.sh' | crontab - && rm /tmp/test_params.txt /tmp/post_reboot_test.sh"

关键细节

  • 一定要记得清理临时cron任务和参数文件,避免下次运行时触发重复任务。
  • 如果post_reboot_test.sh需要依赖配置文件,也可以通过scp提前传到树莓派。

额外小提示

  • 测试时可以先手动模拟重启,验证检测逻辑是否正常工作。
  • 可以在脚本中添加日志输出,比如把测试结果保存到本地文件,方便后续排查问题。

内容的提问来源于stack exchange,提问作者Jojo

火山引擎 最新活动