저는 현재 beaglebone green을 부팅하고 Python 스크립트를 시작하는 데 걸리는 시간을 줄이려고 노력하고 있습니다. 내 간단한 Python 스크립트는 케이프의 릴레이를 켭니다.
나는 릴레이가 회전하는 데 걸리는 시간을 릴레이가 시작되고 유용한 작업을 수행하는 데 걸리는 시간으로 사용했습니다.
이전에는 릴레이에 18초가 걸렸는데 systemd를 통해 14초로 단축했습니다.
Python 프로그램을 시작하기 위해 간단한 단위 파일을 만들었습니다.
[Unit]
Description=Relaycheck run on startup
DefaultDependencies=no
After=systemd-system.slice
[Service]
WorkingDirectory=/home/
ExecStart=/home/relaycheck2.py
StandardOutput=null
[Install]
Alias=relaycheck2.service
다음은 현재 출시 차트의 잘린 이미지입니다. 안내도
내가 이해한 바에 따르면 내 서비스는 매우 일찍 실행되며 네트워킹과 같이 시간이 많이 걸리는 서비스는 내 릴레이 서비스에 영향을 미치지 않습니다. 맞습니까?
systemd로 부팅 시간을 줄이기 위해 할 수 있는 다른 방법이 있나요?
답변1
프로그램이 상태를 유지해야 하는지 여부(쓰기 가능한 디스크가 필요합니까?) 할 수 있는 가장 간단한 일은 init 시스템을 전혀 사용하지 않는 것입니다. 대신 이것을 커널 매개변수에 추가하는 것을 고려해보세요(대부분 uBoot 환경/구성에서):
init=/path/to/your/program
systemd
따라서 Linux 커널은 실행되지 않고(프로세스 관리자) 대신 프로그램을 첫 번째 프로세스로 실행합니다. 이제 이것이 Python 스크립트라고 말합니다. 나는 아니에요생각하다스크립트를 init로 실행할 수 있습니다. Python 애플리케이션을 생성하려면 컴파일된 언어로 작은 래퍼 프로그램을 작성해야 할 수도 있습니다.
쉘/래퍼도 신호를 처리해야 한다는 점을 기억하십시오(기본 신호 처리기가 없는 프로그램의 경우 init/systemd가 신호를 처리함). 다음과 같은 것을 사용하여 탈출할 수도 있습니다.멍청한 초기화일반적으로 Docker 컨테이너와 함께 사용됩니다.
쓰기 가능한 볼륨이 필요한 경우 래퍼에 파티션을 마운트하도록 요청할 수도 있습니다(루트 파티션일 필요는 없습니다. 저장을 위해 USB 스틱을 마운트해야 할 수도 있습니다).
임베디드 시스템/uBoot에서는 커널 매개변수가 약간 까다로울 수 있으므로 먼저 데스크탑 가상 머신에서 이것을 시도해 보겠습니다.