백그라운드에서 명령 실행을 지연하는 방법은 무엇입니까?

백그라운드에서 명령 실행을 지연하는 방법은 무엇입니까?

누군가 이 작업을 수행하는 프로그램을 작성하는 방법을 알려주실 수 있나요? 5분 후

echo "80" > /sys/class/leds/blue/brightness

이 프로그램을 서비스처럼 백그라운드에서 실행하고 싶습니다. rngd저는 Linux에 대해 잘 모르기 때문에 그렇게 할 수 없습니다.

답변1

( sleep 300 ; echo "80" > /sys/class/leds/blue/brightness ) &

이렇게 하면 스크립트가 계속 진행되거나 새 스크립트가 실행되는 동안 즉시 제어권을 다시 얻을 수 있습니다.백그라운드 작업스크립트 시작 부분에는 sleep과 echo라는 두 가지 명령이 있습니다.

일반적인 실수는 이들 중 하나 sleep또는 echo둘 다를 제공하려고 시도했지만 &예상대로 작동하지 않는 것입니다. 일련의 명령을 실행하면 ()해당 명령이 별도의 셸 프로세스에 생성되어 사용할 수 있습니다 &.


나는 그것이 매우 유용하다고 생각했습니다. 제가 개발한 임베디드 장치에는 감시 장치와 함께 작동하는 기본 응용 프로그램이 있습니다. 부팅 직후 워치독 재설정을 트리거하는 방식으로 실패하면 OS 부팅과 재설정 사이의 시간이 SSH 로그인이 발생하고 애플리케이션이 시작되지 않을 만큼 길지 않기 때문에 원격으로 수정하기가 어렵습니다. 따라서 시스템이 얼마나 빨리 재부팅되는지 확인하고 재부팅 시 지연을 도입하여 수동으로 문제를 해결할 시간을 확보할 수 있는 방법이 필요합니다.

 [ -f /tmp/startdelay ] && sleep 30
 touch /tmp/startdelay
 ( sleep 30 ; rm /tmp/startdelay ) &
 [ -f /tmp/noautostart ] && exit 0
 start_app

로그인하고 실행하면 touch /tmp/noautostart기본 응용 프로그램이 시작되지 않습니다. 워치독이 시작되면 rm /tmp/startdelay실행되지 않으며 다음에 시스템이 부팅될 때 이를 중지할 수 있는 추가 30초가 제공됩니다. 그렇지 않으면 재시작이 빠르고 지연이 발생하지 않습니다.

답변2

at명령 사용

echo "echo \"80\" > /sys/class/leds/blue/brightness" | at now + 5 min

백그라운드에서 실행됩니다

답변3

프로그램을 5분 동안 실행하고 나머지 프로그램은 계속(또는 완료)하려면 백그라운드에 절전 기능도 설정해야 합니다.

#!/bin/bash

runWithDelay () {
    sleep $1;
    shift;
    "${@}";
}

runWithDelay 3 echo world &
echo hello    

그러면 가 인쇄 hello되고 3초 후에(메인 프로그램이 종료된 후) 가 인쇄됩니다 world.

중요한 부분은 &함수 실행을 백그라운드로 분기하는 것입니다.

관련 정보