"watch"를 백그라운드 작업으로 실행하는 방법은 무엇입니까?

"watch"를 백그라운드 작업으로 실행하는 방법은 무엇입니까?

내가 실행할 때 :

watch 'cmd >> output.txt' &

작업이 시스템에 의해 일시 중지되었습니다.

3569 중지됨(tty 출력)

해결책이 있나요?

답변1

watch 의 목적 watch은 명령의 결과를 전체 화면으로 표시하고 계속 업데이트하는 것입니다. 출력을 파일로 리디렉션하고 백그라운드에 놓으면 애초에 watch를 사용할 이유가 없습니다.

지연(기본적으로 2초 대기)을 두고 명령을 반복해서 실행하려는 경우 watch다음과 같은 명령을 사용할 수 있습니다.

while true; do
    cmd >> output.txt
    sleep 2
done

답변2

@SDK 덕분에 업데이트됩니다.

watch -n 1 'date | tee -a output.txt' &>/dev/null &

tee는 매우 유용하며 출력을 지정된 파일로 푸시합니다.

이전 답변:

방법은 다음과 같습니다.

watch -n 1 'date' &>/dev/null &

프로세스를 백그라운드에 배치하므로 터미널 디스플레이가 필요하지 않으며 파일로 리디렉션하는 것이 좋다고 가정할 수 있습니다. 이렇게 하면 watch아무런 문제없이 배경으로 들어갈 수 있게 됩니다.

sleepMichael Mrozek이 제안한 것처럼 천천히 지연될 것이며 이는 아마도 바람직하지 않을 것입니다. 시스템 시간을 모니터링하고 경과 시간에 따라 명령을 실행하는 복잡한 셸 스크립트 외에도 watch -p정확한 타이밍을 위한 좋은 선택입니다.

정확한 타이밍을 위해:

watch -n 1 -p 'date' &>/dev/null &

답변3

당신의 동기는 잘 모르겠지만, 어쩌면 그것으로 충분할까요?

while true; do sleep 2; cmd >>output.txt; done &

그렇지 않다면, 그것이 정말로 필요한 이유를 설명하십시오 watch.

답변4

동기에 따라 다릅니다.

  • 정기적으로 무언가를 실행하고 싶습니다. 그런 다음 cron을 직접 사용할 수 있습니다. (귀하의 목적에 따라 1분 단위의 시간 단위로 충분한 경우)

    • 참고: 간격이 짧거나 장치가 매우 제한된 경우 crond에서 더 적은 수의 메시지를 기록하도록 syslog를 구성하지 않으면 syslog가 매우 빨리 채워집니다.
  • 단지 무언가를 반복적으로 실행하고 싶을 뿐입니다:

    while sleep 2 ; do
      cmd
    done >& log.txt
    

    (예를 들어 crontab에서 이 명령을 실행할 수 있지만 스크립트를 사용하는 것이 좋습니다.)

  • 명령을 주기적으로 실행하고 마지막 실행 결과에 액세스하려고 합니다.

    • 출력을 ramfs에 쓸 수 있습니다(이전 스크립트 수정).

      while sleep 2 ; do
        cmd >& last_execution.log
      done 
      

      또는 더 나은 방법은 다음과 같습니다.

      while sleep 2 ; do
        cmd >& last_execution.log.tmp 
        mv last_execution.log.tmp last_execution.log ## atomically
      done 
      
    • 결합할 수 screen있으므로 watch한 화면에 맞는 한 항상 최신 상태를 볼 수 있습니다.

      screen watch -n 3660 ./make-backup.sh
      

관련 정보