이 작업을 수행하는 프로그램을 만드는 방법을 누군가에게 보여줄 수 있습니까? 5 분 후
echo "80" > /sys/class/leds/blue/brightness
이 프로그램이 백그라운드에서 실행되기를 원합니다 (예 : rngd
서비스). Linux에 대해 잘 모르기 때문에이 작업을 수행 할 수 없습니다.
답변
( sleep 300 ; echo "80" > /sys/class/leds/blue/brightness ) &
그러면 스크립트가 계속 진행되거나 즉시 제어권이 복원되고 새로운 <스크립트의 em> 백그라운드 작업 은 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 초가 더 걸립니다. 그렇지 않으면 지체없이 빠르게 다시 시작할 수 있습니다.
댓글
답변
at
명령 사용
echo "echo \"80\" > /sys/class/leds/blue/brightness" | at now + 5 min
백그라운드에서 실행됩니다.
댓글
- 올바른 방법입니다. 하지만 atd 데몬이 실행되어야하며 대부분의 시스템에서 패키지가 설치되어 있어야합니다.
- 이스케이프를 방지하기 위해 작은 따옴표를 사용할 수 있으며
echo
모두 heredoc 또는 herestring을 사용합니다. - @Julian,
at
는 표준 POSIX 명령입니다. 기본적으로 사용할 수없는 Unix 계열 시스템은 ' 무엇입니까? - @St é phaneChazelas-좋은 질문 . 저는 '이 문제가 있다는 것을 알고 있지만 얼마 전 일입니다. 나는 약간의 확인을했고 at 명령은 꽤 유비쿼터스처럼 보입니다. 또한 atd는 Linux 전용이며 일부 Linux 시스템에서도 BSD 스타일 cron 데몬으로 대체 될 수 있습니다. ' 내 댓글이 오래된 것으로 간주하겠습니다.
- '에서 ' 및 Android 8에서 명령을 찾을 수 없음
답변
5에서 실행하려는 경우 분이지만 나머지 프로그램을 계속 (또는 완료)하려면 절전 모드도 백그라운드로 설정해야합니다.
#!/bin/bash runWithDelay () { sleep $1; shift; "${@}"; } runWithDelay 3 echo world & echo hello
이렇게하면 hello
3 초 후 (메인 프로그램이 종료 된 후) world
를 인쇄합니다.
중요한 부분은 &
함수 실행을 백그라운드로 포크합니다.
댓글
- 대신
runWithDelay () { sleep $1; "${@:2}"; }
를 제안해도 될까요? - 제 생각에 두 번째 예에서는
doWhateverWithDelay 3 &
를 읽어야합니다. - @manatwork : Cheers.
- @goldilocks, 는 인용 할 수 있으며 인용 된 단어 목록으로 확장됩니다. 따라서
"$@"
(중괄호가 마음에 들면"${@}"
)로 만드는 것이 좋습니다. pastebin.com/MU7hbB2C - @manatwork : Point taken;) echo와 함께 args를 사용하여 시도했습니다 (
-n
), 분명히 조금 순진했습니다.
를 참조하십시오.
&
를 사용하여 수면을 배경으로합니다. " 수면을 배경으로해야합니다. " 는 처음부터 첫 번째 줄에있었습니다. 나를 믿지 못한다면 ' 수정 내역을보세요. 제 대답은 당신의 대답보다 5 분 더 오래되었습니다 : P()
그룹을 배경으로하지 않으면 생성 된 쉘이 완료 될 때까지 원래 쉘이 일시 중지됩니다.)