Как отключить RPi при работе без использования

Если я запускаю Pi без головы, есть ли команда, которую я могу использовать для безопасного закрытия или просто удалить шнур питания?

32 голоса | спросил Eric Wilson 29 Jam1000000amTue, 29 Jan 2013 06:35:07 +040013 2013, 06:35:07

8 ответов


39

Вы можете безопасно отключить пи, используя

shutdown -h now

-h просто останавливает все процессы

ответил Impulss 29 Jam1000000amTue, 29 Jan 2013 06:48:32 +040013 2013, 06:48:32
40

Не просто отсоединяйте шнур, поскольку это может иногда (возможно, часто) приводить к повреждению файловой системы.

Как говорит Impluss, используйте shutdown. Недавно я столкнулся с вопросом о настройке udev для запуска выключения или перезагрузки, когда определенное устройство USB отключено. Это полезно, если система перестала отвечать на запросы или потеряла сетевое соединение, и вы не можете или не будете беспокоиться о подключении спрятанных устройств (человеческих интерфейсов) к клавиатуре.

Существует хорошее, возможно, слегка устаревшее, но хорошо написанное введение в правила udev здесь | . Основная идея заключается в том, что вы получаете некоторую информацию об устройстве через lsusb, например:

Bus 002 Device 003: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN

Третье поле с меткой ID - это идентификатор поставщика и модели, разделенный двоеточием. Предполагая, что вы не подключили несколько одинаковых устройств, эта комбинация должна быть уникальной.

Вы можете получить более подробную релевантную информацию через udevadm monitor --udev --property, который будет сообщать об стандарте до тех пор, пока вы его не убьете, например. когда я отсоединяю ключ от wiei wiei от подростка, он выскакивает вперед:

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 в отношении события «удалить».

Создайте файл в /etc/udev/rules.d. Это то же самое, независимо от распределения. Файл должен заканчиваться на .rules, и все файлы в этом каталоге обрабатываются лексикографически. Я считаю, что ранее объявленные ранее правила имеют приоритет, поэтому использование 00-my_pi.rules будет держать его в начале строки (номера сортируются перед буквами). В нем добавьте строку, например:

ACTION=="remove", ENV{ID_VENDOR_ID}=="0bda", ENV{ID_MODEL_ID}=="8176", RUN+="/sbin/shutdown -h now"

Остерегайтесь ==, а не =. Если вы используете более поздний, критерии не имеют смысла. В этом случае вы можете получить правило udev, соответствующее любому событию!

Убедитесь, что это загружено с помощью udevadm control --reload-rules. Теперь, когда вы вытаскиваете ключ Wi-Fi, pi должен полностью отключиться ... дайте ему минутку, чтобы сделать это, и вы можете отключить питание (попробуйте это при первом подключении экрана). Вы также можете использовать это для перезагрузки - см. man shutdown и, фактически, справочную страницу для всех упомянутых здесь команд;)

ответил goldilocks 29 Jam1000000amTue, 29 Jan 2013 07:43:51 +040013 2013, 07:43:51
8

Вы можете выполнить следующую команду для выключения:

sudo init 0

И для перезагрузки:

sudo init 6
ответил Registered User 31 Jam1000000amThu, 31 Jan 2013 09:13:25 +040013 2013, 09:13:25
7

Мой предпочтительный метод - использовать sudo poweroff, который является псевдонимом команды shutdown, которая также убивает использование энергии.

ответил sdenton4 5 FebruaryEurope/MoscowbWed, 05 Feb 2014 03:07:06 +0400000000amWed, 05 Feb 2014 03:07:06 +040014 2014, 03:07:06
6

Хотя вопрос уже получил адекватный ответ; мои предпочтения отличаются от того, на что уже был дан ответ.

Как говорили другие, избегайте просто тянуть власть. Мои предпочтительные команды (либо root, либо preend с помощью sudo):

Чтобы остановить: halt (для Wheezy и до того, как эта команда также отключит систему, для Jessie она фактически не отключится, хотя безопасно вытащить вилку после завершения) halt -p; shutdown now -h или просто poweroff необходимы для Jessie ...

Для перезагрузки: reboot

Я предпочитаю эти команды, поскольку они прямолинейны, легко запоминаются и само собой разумеются ...

ответил Jeremy Davis 20 42014vEurope/Moscow11bEurope/MoscowThu, 20 Nov 2014 02:36:51 +0300 2014, 02:36:51
4

Просто, чтобы вставить его, если вы добавляете немного аппаратного обеспечения, вы можете написать небольшой демон для опроса контактов GPIO и утверждения некоторого вывода, перезагрузки (или выключения) Pi.

Кроме того, все команды, упомянутые здесь, могут запускаться через SSH.

ответил Maxthon Chan 8 MaramSun, 08 Mar 2015 03:04:45 +03002015-03-08T03:04:45+03:0003 2015, 03:04:45
3

Я знаю, что через 3 года после первоначального вопроса. Но я просто получил свою малину Pi, и у меня возникли проблемы с ее закрытием, если я забыл подключить ее к экрану монитора, и у нее нет сетевого подключения.

Я написал небольшой скрипт Python, чтобы автоматически отключить его в течение 60 секунд, подключив файл с именем «pi_auto_shutdown».

Просто вызовите этот скрипт из rc.local.

Надеюсь, это поможет.

shutdown_loop_delay = 60
shutdown_flag_file = 'pi_auto_shutdown'

def poll_shutdown_flag():
    """check whether a shutdown flag file in a usb drive exists"""

    ## run mount command
    ## sample mount output: "/dev/sda1 on /media/path/"
    output, error = subprocess.Popen('mount', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
    if len(error) > 0:
        log('mount error: {}'.format(error))
        return False

    ## parse mount output
    for output_line in output.split('\n'):
        output_words = output_line.split(' ')

        if len(output_words) < 3:
            continue

        if output_words[0].startswith('/dev/sd'):
            flag_file_path = os.path.join(output_words[2], shutdown_flag_file)
            if os.path.isfile(flag_file_path):
                return True

    return False

def shutdown():
    """shutdown the system immediately"""
    subprocess.Popen('sudo shutdown -h now', shell=True).communicate()

def loop_shutdown():
    while True:
        time.sleep(shutdown_loop_delay)
        if poll_shutdown_flag():
            shutdown()

loop_shutdown()
ответил VoidMain 3 J000000Sunday16 2016, 08:49:54
1

I ssh в поле RPi с помощью команды

  

$ ssh rpi sudo poweroff

rpi является псевдонимом для IP-адреса моего поля RPi и определяется в файле ~ /.ssh /config .

ответил ismartbuoy 14 Jpm1000000pmSat, 14 Jan 2017 20:28:35 +030017 2017, 20:28:35

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132