Raspberry Pi Запустите скрипт Python во время загрузки

Позвольте мне ответить, насколько я могу с предоставленной информацией.

Во-первых, SLES 12 (и более поздние версии )действительно не нуждаются в пакете ядра -kdump. Этот особый вариант ядра был нужен только в древние времена, потому что ядро ​​паники должно быть загружено по физическому адресу, отличному от работающего ядра, но адрес загрузки можно было изменить только во время компиляции (, иначе ядро ​​нельзя было перемещать ). ].

Во-вторых, kdump не запускается, потому что базовый системный вызов kexec_file_loadзавершается с ошибкой EADDRNOTAVAIL. Это происходит, если система не может выделить один или несколько буферов, необходимых для загрузки ядра паники в оперативную память. Обратите внимание, что теоретически может быть достаточно зарезервированной памяти для ядра паники, но поскольку выделение имеет некоторые дополнительные ограничения, накладываемые загрузочным кодом ядра Linux и/или драйверами, эта оперативная память может не использоваться для загрузки ядра паники. Другой системе может повезти больше благодаря другому расположению физической памяти.

В качестве первого шага я бы попробовал увеличить размер зарезервированной памяти в командной строке ядра (, например. crashkernel=256M), перезагрузитесь и посмотрите, поможет ли это.

0
31.01.2020, 20:13
1 ответ

Systemd может запускать службу условно относительно другой службы, применяя зависимые отношения, которые вы указываете в файле модуля службы. У меня была такая же проблема, как и у вас, когда мне нужно было выполнить скрипт в определенном порядке, поэтому я создал для него службу systemd и запустил свою собственную службу ПОСЛЕ другой службы.

Звучит сложнее, чем есть на самом деле. Не очень сложно и стоит знать об этом для дальнейшего использования.

Это (2 )шага процесса:

Шаг 1 :Анализ роста заказа услуг -вверх

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

Приведенная ниже команда отобразит запуск служб -с соответствующим временем от включения питания -до :

.
sudo systemd-analyze plot > /home/pi/services-startup.svg

Откройте файл с помощью Средство просмотра изображений , и вы увидите при запуске системы, когда запускаются службы.

Другие инструменты для понимания зависимостей между сервисами:

sudo systemd-analyze critical-chain
sudo systemd-analyze critical-chain someServiceName.service
tree /etc/systemd/system

Шаг 2 :Создайте специальную услугу для вашего сценария, чтобы обеспечить зависимость от заказа

Существует множество директив, которые можно использовать для создания зависимых отношений между сервисами, Beforeи Afterявляются наиболее очевидными:

https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Before=

Пример файла модуля:

У меня был сценарий, который отправлял по электронной почте IP-адрес безголового Pi, который не работал из-за порядка, в котором сценарий (запускался как служба ). Я провел приведенный выше анализ и создал следующую конфигурацию файла модуля для выполнения моего сценария в качестве службыoneshot .Это было достигнуто путем ожидания запуска моей пользовательской службы до ПОСЛЕ завершения службы motion:

cat <<EOF> /etc/systemd/system/email-camera-address.service
[Unit]
Description=Email IP Address of Camera on Boot
Requires=network-online.target
After=motion.service
[Service]
User=pi
Group=pi
Type=oneshot
ExecStart=$PATHSCRIPTS/email-camera-address.sh
[Install]
WantedBy=multi-user.target
EOF

chmod 644 /etc/systemd/system/email-camera-address.service
systemctl enable email-camera-address.service

Полный скрипт, взятый из приведенного выше, можно найти ЗДЕСЬ:

0
28.04.2021, 23:25

Теги

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