udev 이벤트를 통해 수명이 긴 애플리케이션을 여러 번 실행하도록 설계된 스크립트를 실행하는 가장 좋은 방법은 무엇입니까?

udev 이벤트를 통해 수명이 긴 애플리케이션을 여러 번 실행하도록 설계된 스크립트를 실행하는 가장 좋은 방법은 무엇입니까?

버튼을 누르면 USB를 통해 연결되는 장치가 있습니다. 버튼을 놓으면 즉시 연결이 중지됩니다. 이 버튼을 누르면 그래픽 응용 프로그램을 시작하고 싶습니다.

버튼에 성공적으로 액세스하고 애플리케이션을 시작할 수 있습니다. 문제는 버튼을 여러 번 누르면 udev가 분명히 이벤트를 대기열에 넣거나 처리될 수 있을 때까지 보관하기 때문에 앱을 닫은 후 계속해서 다시 시작된다는 것입니다.

그래서 애플리케이션이 실행 중인지 확인하기 위해 bash 스크립트를 작성했습니다. 실행 중이 아닐 때는 애플리케이션을 시작합니다. 실행되면 응용 프로그램이 최대화됩니다. 여기서도 같은 문제가 발생하여 백그라운드에서 앱을 시작하려고 시도했지만 &udev 규칙이 완료되면 앱이 종료되었습니다. 같은nohup

어쩌면 bash 스크립팅이 최선의 방법이 아닐 수도 있습니다. 스크립트가 완료되고 다시 실행될 수 있도록 별도의 프로세스에서 수명이 긴 애플리케이션을 시작할 수 있는 스크립트가 필요합니다. 가능하다면 더 많은 종속성을 설치할 필요가 없도록 Linux 기본 방법이어야 합니다.

이 스레드를 찾았습니다.Udev 이벤트에서 긴 프로세스를 실행하는 방법은 무엇입니까?같은 문제를 다루고 있습니다. 그는 using 을 사용하여 문제를 해결한 것으로 보이지만 cmd | at nowcronie에는 cron과 유사한 명령이 없기 때문에 이 명령은 더 이상 사용되지 않는 것 같습니다.

방금 at 가 설치되어야 하는 패키지라는 것을 알았지만 애플리케이션도 여러 번 시작되고 스크립트가 완료되지 않습니다.

저는 Manjaro를 실행하고 있으므로 기본적으로 Arch입니다.

답변1

udev 대기열 이벤트 문제를 해결하기 위해 RUN+="/local/run.sh /local/main-script.sh"run.sh에 포함된 이벤트를 사용합니다.

#!/bin/bash

echo $1 | at now

먼저 그것이 sudo apt-get install at필요합니다.

여러 번 실행하지 않으려면 다음과 같은 것이 필요합니다.

if [ -f /opt/running_on ]; then
    exit
else
   echo run > /opt/running_on
   # put your commands here
   sleep 10
   rm /opt/running_on
fi

관련 정보