如果我无头运行Pi,是否有可以安全关闭的命令,还是应该简单地拔下电源线?

评论

关闭电源是关闭电源的最佳方法

poweroff可能是停止的象征性链接...! 8-)

#1 楼

您可以使用

shutdown -h now


安全地关闭pi -h仅停止所有进程

评论


在-r会重新启动(关机+重新启动)的同时,可能值得学习。

– XTL
2013年1月29日7:57



别忘了您必须是root用户才能关机或使用sudo。

–keiki
13年1月31日上午9:34

或者sudo poweroff

– Berto
15年7月13日在18:00

-h会停止整个系统-如果没有该选项,则关闭将使其进入运行级别1-即单用户模式,等待超级用户登录(需要root密码)。以root身份登录然后退出init之后,将重做将RPi设置为多用户模式所需的内容-就像在原始启动过程中所做的一样(在完成所有内容(例如fsck等)后运行) /etc/rc.local)。在这种情况下,“关机”是“使普通用户脱机”。

– SlySven
16年1月14日,下午4:06

是的,但是关闭实际上需要一些时间来执行,并且在它关闭时会断开所有ssh客户端的连接。那么,您如何知道何时安全(例如,卸下SD卡)?

–汤姆·俄格(Tom Auger)
17年11月22日在18:51

#2 楼

不要简单地拔掉电源线,因为这可能偶尔(可能经常)导致文件系统损坏。
如Impluss所说,请使用shutdown。我最近遇到了有关配置udev以在拔出特定USB设备时触发关机或重新启动的提示。如果系统变得无响应或失去网络连接,并且您无法或不会费心插入诸如键盘之类的隐藏式(人机界面)设备,这将非常有用。
稍微过时但写得很好的udev规则介绍| here |。基本思想是,您可以通过lsusb获得有关该设备的一些信息,例如:
Bus 002 Device 003: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN

标有ID的第三个字段是由冒号分隔的供应商和型号ID。假设您没有插入多个相同的设备,则此组合应该是唯一的。当我从上方拔出teenieweenie wifi加密狗时,它会弹出:
UDEV  [2834.504860] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6 (usb)
ACTION=remove
[...]
ID_BUS=usb
ID_MODEL=802.11n_WLAN_Adapter
ID_MODEL_ENC=802.11n\x20WLAN\x20Adapter
ID_MODEL_ID=8176
[...]
ID_VENDOR=Realtek
ID_VENDOR_ENC=Realtek
ID_VENDOR_ID=0bda

注意ID_MODEL和ID_VENDOR字段。这些就是您要在udev规则中使用的内容。在线上有一些过时或不正确的来源建议使用ATTR字段,但这是与“删除”事件有关的ENV字段。
udevadm monitor --udev --property中创建文件。无论分布如何,都是一样的。该文件必须以/etc/udev/rules.d结尾,并且该目录中的所有文件均按字典顺序进行处理。我相信先前声明的规则优先,因此使用.rules会将其保持在行的开头(数字在字母前排序)。在其中添加以下行:
ACTION=="remove", ENV{ID_VENDOR_ID}=="0bda", ENV{ID_MODEL_ID}=="8176", RUN+="/sbin/shutdown -h now"

当心00-my_pi.rules而不是==。如果使用更高版本,则该标准将毫无意义。在这种情况下,您可能会遇到与任何事件匹配的udev规则!
确保已加载=。现在,当您拉出wifi加密狗时,pi应该干净地关闭...给它一分钟的时间,然后就可以拔掉电源(第一次连接屏幕时尝试一下)。您还可以使用它来重新引导-参见udevadm control --reload-rules,实际上是此处提到的所有命令的手册页;)

评论


我不认为这是OP的要求。但是+1的信息。

– Vincent P
13年1月29日在4:41

整齐!您当然也应该能够移除(或插入)任意USB设备来触发此操作

– Tobias Kienzler
13年1月29日在7:00

这是一个不错的开始。通过GPIO按钮触发关闭操作(通过某种方式使ACPI或HID事件发生这种事情?)或其他操作会更加方便。

– XTL
13年1月29日在7:56

@XTL:周围有apci守护程序,因此有可能(内核通过proc等报告)。至少对于pi上的gpio同样如此。 HID事件更具有上下文关系(示例上下文是GUI桌面环境),并且您可以键入“ halt”(在Linux上== shutdown -h)这一事实可能减轻了对此的需要;

–金锁♦
13年1月30日在8:03



这是完美的,加密狗是唯一插入Pi的东西,而且我们经常会断开连接,因此我们需要移动它,而不会因断电而损坏它。

– noio
13年6月23日在11:31

#3 楼

您可以发出以下命令来关闭:

sudo init 0


并重新启动:

sudo init 6


评论


这在很大程度上取决于运行级别,而运行级别是操作系统仍在使用的概念。如今,向systemd的转移使这种方法的可用性降低了。

–斯蒂芬·迈克尔·凯拉特(Stephen Michael Kellat)
15年7月13日在3:16

不包括今天的编辑,您可能已经注意到这是一个很旧的答案。这个问题还存在两年以上。

–注册用户
15年7月13日在3:41

在这种用法中,最好使用sudo telinit#,其中#是0到6之间的数字-telinit是指向init的符号链接,该链接可以识别它不是由其主名称“ init”调用的(并且它没有PID为1! telinit是“告诉init新运行级别”的缩写。

– SlySven
16年1月14日在4:11

#4 楼

我的首选方法是使用sudo poweroff,这是关闭命令的别名,它也可以减少电源使用。

#5 楼

这个问题已经得到充分回答;我的喜好与已经回答的喜好不同。我首选的命令(以root身份或以sudo开头):

要暂停:halt(对于Wheezy和之前的命令,该命令也会关闭系统电源;对于Jessie,虽然安全,但实际上并未关闭电源完成后拔掉插头)。杰西需要halt -p或简单地使用shutdown now -h ...

要重新启动:poweroff

我更喜欢这些命令,因为它们简单明了,易于记忆和不言而喻。 。

评论


并不是要抱怨,但我认为我的答案(来自8个月前)被否决有点苛刻,因为Debian(即Raspbian的上游)改变了其命令的工作方式(假设这就是为什么我被否决了) 。同样,我的答案(在编辑之前)仍然可以回答OP(即,如果您停止系统,可以安全地拔下插头...)FWIW我已经更新了答案,因此很显然,它不再像用户可能的那样起作用。希望...

–杰里米·戴维斯(Jeremy Davis)
15年6月18日在4:50



您不应该养成使用停止或关闭电源的习惯,因为它们只是GNU工具现在关机-h的别名,但是在其他系统上,您将立即关闭系统电源,从而杀死所有程序并可能损坏文件系统。这就是说,您可以在大多数Linux发行版的树莓派pi上使用它,但是如果您使用pi进行学习,则可能需要“以正确的方式”进行。

– allo
16年7月3日在15:48

@allo-对于旧版Linux OS和其他非Linux Unix之类的OS(例如BSD)变体,您也很正确。但是在使用SystemD的最新Linux操作系统(即当今大多数Linux)中,情况并非如此。停止,关机,重新引导和关机都是与systemctl的符号链接(还传递了原始命令)。然后触发适当的SystemD目标: poweroff.target。 FWIW poweroff.target会触发ACPI调用以彻底关闭系统。因此,AFAIK在这一时代的电源关闭(或systemctl电源关闭)是“正确的方法”。 :)

–杰里米·戴维斯(Jeremy Davis)
18年11月16日在4:25

像在许多情况下使用linux一样,有多种方法可以做到这一点。但是您应该考虑是否不想以标准中描述的方式学习它,其他unix系统也遵循该方法。作为linux用户,对您没有什么好处,但是谁知道您将来何时会尝试其他系统?不要依赖暂停,也不要依赖rm来具有--no-preserve-root标志。不要依赖/ bin / sh是/ bin / bash(对于基于debian的系统来说,甚至不再是这样)。尝试使用“正确”的方法通常很有用,即使当前它可以以其他方式起作用。

– allo
18年11月16日在9:13

@allo-公平的观点,我认为分享您对不同系统的知识真是太棒了,并且我同意,当然值得注意系统之间的差异和相关限制。尽管我不同意您的建议,即您的方式是“正确”的方式。这可能是“符合posix的”方式,但并没有使“正确”和“错误”成为另一种方式。例如。使用bash(和bashisms)是完全合法的IMO,尽管我同意如果您需要/想要bash,则应明确使用/ bin / bash。仅供参考,我的观点非常以Debian为中心...

–杰里米·戴维斯(Jeremy Davis)
18年11月17日在0:18

#6 楼

只需投入一下,如果您要添加一些硬件,则可以编写一个小的守护程序来轮询GPIO引脚,并在确定某个引脚后,重新启动(或关闭)Pi。

此外,这里提到的所有命令都可以通过SSH运行。

#7 楼

我知道最初的问题已经过去三年了。但是我刚拿到Raspberry Pi,如果忘记将它连接到监视器屏幕并且没有任何网络连接,则无法关闭它。

我编写了一个小的Python脚本,通过插入包含名为“ pi_auto_shutdown”的文件的Thumbdrive,在60秒内自动将其关闭。 .local。

希望对您有所帮助。

评论


有趣的方法。

–埃里克·威尔逊(Eric Wilson)
16年7月3日在18:02

#8 楼

我使用命令ssh进入RPi框$ ssh rpi sudo poweroff


rpi是RPi框IP地址的别名并在〜/ .ssh / config文件中定义。