부팅 후 바로 애플리케이션을 실행할 수 있는 방법을 찾고 있습니다. 이 애플리케이션은 1시간 후에 시간 초과됩니다. 초기 시작 후 1시간(초기 애플리케이션 시간 초과 후)에 애플리케이션의 다른 인스턴스를 시작하고 싶습니다. 나는 Cron이 이 작업을 수행하도록 (영리하게) 구성될 수 있다고 생각했습니다. 부팅 시 시스템 시계를 00:00:00으로 재설정한 다음 Cron을 정상적으로 실행하는 것 외에 다른 방법이 있습니까? 미리 감사드립니다.
고쳐 쓰다:maulinlawn의 제안에 따라 Systemd.service 접근 방식을 사용했습니다. 특히 /usr/bin/startVideo/startVideo.py에 Python 스크립트의 복사본을 배치했습니다. 그런 다음 /lib/systemd/service/startVideo.service에 서비스 파일을 만듭니다. 이 파일은,
[Unit]
Description=starts video recorder
[Service]
Type=simple
ExecStart=/usr/local/bin/startVideo/startVideo.py
Restart=always
[Install]
WantedBy=multi-user.target
결국 나는 도망쳤고,
sudo systemctl enable startVideo.service
등록 서비스. 모니터나 키보드가 연결되지 않은 상태에서 카메라에 연결된 Raspberry Pi3에서 실행됩니다. 저는 연중무휴 24시간 비디오를 녹화할 수 있고 전원이 꺼지면 스스로 재부팅할 수 있는 시스템을 찾고 있습니다. 다른 제안? 이 유형의 응용 프로그램에 대해 "WantedBy"가 올바르게 구성되어 있습니까?
Crowell의 이 솔루션과 지침에 대해 많은 감사를 드립니다.
답변1
귀하의 설명을 토대로systemd
(내 모든 컴퓨터에 이것이 있기 때문에) 파일을 사용하여 .service
응용 프로그램을 시작하십시오..
서비스 파일에서 간단한 while 루프로 애플리케이션을 래핑하는 스크립트를 가리킬 것입니다. 이 같은:
#!/bin/sh
while true; do
/path/to/your/application
done
이렇게 하면 응용 프로그램이 종료("시간 초과")될 때마다 루프의 조건이 항상 true이기 때문에 자체적으로 다시 시작됩니다.
이것은 하나의 방법이고 제가 생각할 수 있는 가장 간단한 방법입니다. 다른 방법도 있을 수 있습니다!
답변2
systemd를 좋아하지 않는 사람들에게는 /var/run에 있는 pidfile을 사용하여 /etc/rc.local(예: Debian)에 있는 프로그램(셸 래퍼)을 호출하는 것이 좋은 선택입니다. 이와 같은 것 while true ; do $_cmd >/dev/null 2>&1 & sleep 3600 ; pkill $( cat /var/run/pgm.pid ) ; rm /var/run/pgm.pid ; done
- 데몬이 자체 PID를 작성할 수 있다고 가정합니다. 그렇지 않으면 하위 프로세스가 아닌 상위 프로세스에만 신호를 보내기 위해 일부 ps text-fu가 필요합니다. 만 PS.