udev 이벤트를 통해 장기 애플리케이션을 여러 번 실행하기 위한 스크립트를 실행하는 가장 좋은 방법은 무엇입니까?

udev 이벤트를 통해 장기 애플리케이션을 여러 번 실행하기 위한 스크립트를 실행하는 가장 좋은 방법은 무엇입니까?

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

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

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

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

이 스레드를 찾았습니다.Udev 이벤트에서 장시간 프로세스를 실행하는 방법은 무엇입니까?그것은 같은 문제를 다루고 있습니다. 그는 을 사용하여 문제를 해결한 것처럼 보였지만 cmd | at now이 명령은 더 이상 사용되지 않는 것 같습니다. 왜냐하면 cronie에는 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

관련 정보