关机后5分钟如何重启Raspberry Pi?

时间:2017-11-19 21:49:16

标签: python linux raspberry-pi operating-system boot

我想要一个简单的脚本,在使用python以编程方式自动关闭5分钟后,重新启动覆盆子pi本身。我的脚本只是立即重新启动它。

if temp > 70:
    os.system("sudo reboot")

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

心甘情愿,没有什么是不可能的!

关闭后如何继续工作?

好的,这是一个奇怪的问题,因为这似乎很清楚,系统一旦失效就无法工作......

但是

  • 可编程系统时钟可以在定义的时间唤醒系统。不幸的是, raspberry pi 没有这种板载计时器系统。
  • 第二种方式:停止所有cpu加热服务。

    如果没有完全关闭,没有任何服务运行的系统会变得安静足以冷却。

    Un * x 下,当切换到单用户模式时,系统不做任何事情(一些raid同步无论如何都可以运行......如果没有raid on raspberry pi ,你可能不得不关心,也许停止raid,wifi和/或卸载一些模块,然后再睡觉然后重新启动)。

  • 第三种方式:电气切断电源,继电器默认放电。

    您可以使用一个小电池和一个5V继电器创建一个小模块来切断电源(通电时)。当电池电量耗尽或带有少量计时器时,您可以自由继电器,然后电源恢复......

停止所有服务并在

之后重启5'

你可以做一件事:

免责声明:这只是近似解决方案,因为我现在没有免费的raspi进行测试,因为这取决于发行版和版本!!你必须理解你做了什么,然后调整其中的一部分!

  • 了解运行级别的工作方式

    • 运行级别1是单用户模式
    • ...网络模式......
    • 运行级别5是默认正常模式
  • modelBuilder.UsePropertyAccessMode(PropertyAccessMode.Property); 复制到一些未使用的/etc/rc1.d/(保存后)

    /etc/rc[2..4].d/

    注意用于运行mv /etc/rc2.d /etc/rc2.d-old cp -a /etc/rc1.d /etc/rc2.d 脚本

    的符号链接数
    single

    放弃它们

    ls /etc/rc2.d/S*single
    lrwxrwxrwx 1 root root 16 jun 19 18:04 /etc/rc2.d/S32single -> ../init.d/single
    

    通过复制骨架

    创建自己的rm /etc/rc2.d/S32single
    /etc/init.d/rebootIn5

    编辑它们以使cp /etc/init.d/skeleton /etc/init.d/rebootIn5 函数包含类似

    的内容
    start

    可能nohup sh -c 'sleep $((5*60)) ; reboot' & 代替init 5,并检查正常值reboot而不是while (( $(</sys/.../therm_input) > 50 ));do sleep 20;done ......

    然后将它们链接到

    sleep 300
  • 通过您的脚本调用此方法:

    ln -s ../init.d/rebootIn5 rc2.d/S32rebootIn5
    

另见......

可以通过更简单的方式来检查哪些服务正在加热您的系统。 (命令if temp > 70: os.system("sudo init 2") 可以快速概述)

top

然后停止并重新启动一个或几个服务...

这可以通过在运行级别之间切换来完成。您必须将rulevel top -bn 1 | sed '/^ *PID USER/,+1{//d;p};d' 配置为2以停止之前定义的所有服务。 Juste关心服务 cron 不会停止。

答案 1 :(得分:0)

这是使用systemd计时器单元的简单解决方案。它对我有用。

# The quiesce-wait-reboot.timer target places system in rescue mode to quiesce all services 
#       and then waits for the above interval for the UPS to run out of battery and shutdown
#   If line power is restored and the UPS doesn't shutdown, the timer will expire and cause a reboot 
#
#   It should be started with "systemctl isolate quiesce-wait-reboot.timer"
#       by doing an isolate, all services not part of rescue.target will be shutdown
[Unit]
Description=Quiesce to Rescue Mode, Wait, then Reboot - addresses UPS race condition
Requires=rescue.target 
After=rescue.target
AllowIsolate=yes

[Timer]
OnActiveSec=900
Unit=reboot.target