I2C 16x2 디스플레이가 있는 Raspberry Pi가 있습니다. 화면에는 "환영합니다"라고만 표시됩니다.
질문: Raspberry Pi의 전원을 켜자마자 이 스크립트가 실행되기를 원합니다.
rc.local 파일 sudo python /path/to/file에 다음 명령을 추가하면 자동으로 시작되지만 스크립트가 실행되기까지 45초 이상이 걸립니다.
Raspberry Pi의 전원을 켠 후 또는 부팅 후 10초 이내에 Python 스크립트를 시작하거나 화면에 표시할 수 있는 방법이 있습니까?
답변1
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=
유닛 파일 예:
헤드리스 Pi의 IP 주소를 이메일로 보내는 스크립트가 있지만 스크립트 실행 순서(서비스로 실행)로 인해 실패합니다. 위의 분석을 완료하고 스크립트를 실행하기 위해 다음과 같은 단위 파일 구성을 만들었습니다.일회용의제공하다. 이 작업은 다음이 될 때까지 사용자 정의 서비스가 시작될 때까지 기다립니다.뒤쪽에서비스 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
위의 전체 스크립트를 찾을 수 있습니다여기: