我想要一个简单的脚本,在使用python以编程方式自动关闭5分钟后,重新启动覆盆子pi本身。我的脚本只是立即重新启动它。
if temp > 70:
os.system("sudo reboot")
我怎样才能做到这一点?
答案 0 :(得分:0)
好的,这是一个奇怪的问题,因为这似乎很清楚,系统一旦失效就无法工作......
但是
第二种方式:停止所有cpu加热服务。
如果没有完全关闭,没有任何服务运行的系统会变得安静足以冷却。
在 Un * x 下,当切换到单用户模式时,系统不做任何事情(一些raid同步无论如何都可以运行......如果没有raid on raspberry pi ,你可能不得不关心,也许停止raid,wifi和/或卸载一些模块,然后再睡觉然后重新启动)。
第三种方式:电气切断电源,继电器默认放电。
您可以使用一个小电池和一个5V继电器创建一个小模块来切断电源(通电时)。当电池电量耗尽或带有少量计时器时,您可以自由继电器,然后电源恢复......
你可以做一件事:
了解运行级别的工作方式
将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