백그라운드 작업으로`watch '를 어떻게 실행할 수 있습니까?


답변:


26

목적은 watch명령의 결과를 전체 화면으로 표시하고 지속적으로 업데이트하는 것입니다. 출력을 파일로 리디렉션하고 배경을 지정하는 경우 실제로 watch를 사용해야 할 이유가 없습니다.

지연으로 명령을 계속 반복해서 실행하려면 ( watch기본적으로 2 초 동안 대기) 다음과 같이 사용할 수 있습니다.

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

비 차단 방식으로 이것을 수행하는 방법이 있습니까? 예를 들어이 명령과 다른 명령을 단일 bash 스크립트에 넣고 계속해서 백그라운드 에서이 작업을 수행하는 동안이 코드를 계속 실행하려면?
오스틴

14

방법은 다음과 같습니다.

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

프로세스를 백그라운드에서 수행 했으므로 터미널 디스플레이가 필요하지 않고 파일로 리디렉션하고 있다고 가정 할 수 있습니다. 그렇게하면 watch문제없이 배경 을 가질 수 있습니다 .

sleepMichael Mrozek이 제안한 바와 같이 바람직하지 않은 속도가 느리게 지연됩니다. 시스템 시간을 모니터링하고 경과 시간을 기반으로 명령을 실행하는 복잡한 셸 스크립트 외에도 watch -p정확한 타이밍을위한 좋은 옵션이 될 수 있습니다.

정확한 타이밍 :

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

죄송합니다, 어떻게 작동합니까? 왜 &두 번만 사용할 수 있습니까?
phil294

파이프 라인 섹션을 읽고 man bash첫 번째 &작동 방식을 확인하십시오 . ;)
Mioriin

11

나는 당신의 동기에 대해 확실하지 않지만 아마도 이것으로 충분할 것입니까?

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

그렇지 않으면 왜 정말로 필요한지 설명하십시오 watch.


2

tee당신의 친구입니다. 예를 들어, 현재 디렉토리에있는 파일 수를 표시하고 2 초마다 count.txt에 추가하는 방법은 다음과 같습니다.

watch 'find . -maxdepth 1 -printf " " | wc -c | tee --append count.txt'

2

동기 부여에 따라 다릅니다.

  • 주기적으로 무언가를 실행하고 싶습니다. 그런 다음 직접 cron을 사용할 수 있습니다. (시간 단위로 1 분이면 충분합니다.)

    • 참고 : 간격이 매우 짧거나 장치가 매우 제한된 경우, 메시지를 적게 기록하도록 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


0

사용해야 할 경우 -Mike Dangelol0b0의watch 답변을 결합 하십시오.

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

예 :

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

그런 다음 초가 지나가는 것을 지켜보십시오.

tail -f output.txt

0

Watch는 화면에 출력되도록 설계되었지만 출력은 리디렉션 (stdout 및 stderr) 될 수 있으며 백그라운드에서 실행됩니다.

watch 'date >>fa' >/dev/null 2>/dev/null &
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.