Linux에서 매 X초마다 명령 실행하거나 반복하는 방법

A system administrator often needs to run a command repeatedly in a certain periods of time. Often such tasks can be easily completed with simple cron commands. In most of the cases  this should work, but the shortest period which you can run cron command is every 1 minute. Believe it or not, in many cases this is too slow.

Run Linux Command Every Second

이 튜토리얼에서는 top 명령어 (프로세스 및 메모리 사용량을 지속적으로 모니터링)와 유사하게 특정 명령어를 지속적으로 실행 상태로 모니터링하거나 관찰하는 간단한 스크립팅 기술을 배우게 될 것입니다. 기본적으로 3초마다.

우리는 왜 이렇게 자주 명령어를 실행해야 하는지에 대해 논하지 않을 것입니다. 저는 모두가 일상적인 업무나 가정용 PC 및 노트북에서 그에 대한 서로 다른 이유를 갖고 있다고 믿습니다.

1. watch 명령어 사용

Watch는 리눅스 명령어로 주기적으로 명령어나 프로그램을 실행하고 화면에 출력을 보여주는 기능을 제공합니다. 이는 프로그램 출력을 실시간으로 확인할 수 있다는 것을 의미합니다. 기본적으로 watch는 명령어/프로그램을 매 2초마다 다시 실행합니다. 이 간격은 쉽게 변경하여 요구 사항에 맞출 수 있습니다.

메모리 사용량 모니터링

“Watch”는 사용하기 매우 쉽습니다. 이를 테스트하려면 즉시 리눅스 터미널을 열고 다음 명령어를 입력할 수 있습니다:

# watch free -m

위 명령은 시스템의 여유 메모리를 확인하고 free 명령어의 결과를 매 두 초마다 업데이트합니다.

Monitor Memory Usage in Linux

위 출력에서 볼 수 있듯이, 헤더가 있으며 (왼쪽에서 오른쪽으로) 업데이트 간격, 실행되고 있는 명령어 및 현재 시간에 대한 정보를 표시합니다. 이 헤더를 숨기려면 -t 옵션을 사용할 수 있습니다.

다음 논리적인 질문은 – 실행 간격을 어떻게 변경할까요. 그 목적으로 -n 옵션을 사용할 수 있습니다. 이 옵션은 명령이 실행될 간격을 지정합니다. 이 간격은 초 단위로 지정됩니다. 그래서 매 10초마다 script.sh 파일을 실행하려면 다음과 같이 할 수 있습니다:

# watch -n 10 script.sh

참고로 위에 표시된 대로 명령을 실행하면, 스크립트가 위치한 디렉토리로 이동해야 하거나 그 스크립트의 전체 경로를 지정해야 합니다.

watch 명령어의 다른 유용한 옵션은:

  1. -b – 명령이 비정상 종료되면 경고음을 생성합니다.
  2. -c – ANSI 색상 시퀀스를 해석합니다.
  3. -d – 명령 출력에서 변경 사항을 강조합니다.

로그인한 사용자, 업타임 및 부하 평균 모니터링

로그인한 사용자, 서버 업타임 및 부하 평균 출력을 지속적으로 몇 초마다 모니터링하려면 다음 명령을 사용하십시오:

# watch uptime
Watch Linux Load Average

명령을 종료하려면 CTRL+C를 누르세요.

여기서 'uptime' 명령은 기본적으로 2초마다 실행되어 업데이트된 결과를 표시합니다.

복사 명령어 진행 상황 모니터링

리눅스에서 cp 명령을 사용하여 다른 위치로 파일을 복사하는 동안 데이터의 진행 상황이 표시되지 않습니다. 복사되는 데이터의 진행 상황을 보려면 실시간으로 디스크 사용량을 확인하기 위해 watch 명령과 함께 du -s 명령을 사용할 수 있습니다.

# cp ubuntu-15.10-desktop-amd64.iso /home/tecmint/ &
# watch -n 0.1 du -s /home/tecmint/ubuntu-15.10-desktop-amd64.iso 
Monitor Progress of Copy Command

위의 과정이 너무 복잡하다고 생각된다면, 고급 복사 명령을 사용하는 것을 권장합니다. 복사하는 동안 데이터의 진행 상황을 표시합니다.

2. Sleep 명령 사용

Sleep는 종종 셸 스크립트를 디버그하는 데 사용되지만, 다른 유용한 목적도 있습니다. 예를 들어, for 또는 while 루프와 결합하면 멋진 결과를 얻을 수 있습니다.

bash 스크립팅에 처음이라면, bash 루프에 관한 가이드를 확인할 수 있습니다. 여기에서.

"sleep" 명령에 대해 처음 듣는 경우, 지정된 시간 동안 지연시키는 데 사용됩니다. 스크립트에서는 명령 1을 실행한 후 10초를 기다렸다가 명령 2를 실행하는 데 사용할 수 있습니다.

위의 루프를 사용하면 bash에 명령을 실행하고 N초 동안 대기한 다음 명령을 다시 실행하도록 지시할 수 있습니다.

아래에서 두 가지 루프의 예를 볼 수 있습니다:

for loop Example

# for i in {1..10}; do echo -n "This is a test in loop $i "; date ; sleep 5; done

위의 한 줄 코드는 echo 명령어를 실행하고 현재 날짜를 5초 간격으로 10번 표시합니다.

다음은 샘플 출력입니다:

This is a test in loop 1 Wed Feb 17 20:49:47 EET 2016
This is a test in loop 2 Wed Feb 17 20:49:52 EET 2016
This is a test in loop 3 Wed Feb 17 20:49:57 EET 2016
This is a test in loop 4 Wed Feb 17 20:50:02 EET 2016
This is a test in loop 5 Wed Feb 17 20:50:07 EET 2016
This is a test in loop 6 Wed Feb 17 20:50:12 EET 2016
This is a test in loop 7 Wed Feb 17 20:50:17 EET 2016
This is a test in loop 8 Wed Feb 17 20:50:22 EET 2016
This is a test in loop 9 Wed Feb 17 20:50:27 EET 2016
This is a test in loop 10 Wed Feb 17 20:50:32 EET 2016

echodate 명령어를 자신의 명령어나 스크립트로 변경하고 필요에 맞게 sleep 간격을 변경할 수 있습니다.

while loop Example

# while true; do echo -n "This is a test of while loop";date ; sleep 5; done

다음은 샘플 출력입니다:

This is a test of while loopWed Feb 17 20:52:32 EET 2016
This is a test of while loopWed Feb 17 20:52:37 EET 2016
This is a test of while loopWed Feb 17 20:52:42 EET 2016
This is a test of while loopWed Feb 17 20:52:47 EET 2016
This is a test of while loopWed Feb 17 20:52:52 EET 2016
This is a test of while loopWed Feb 17 20:52:57 EET 2016

위 명령은 사용자에 의해 중단되거나 종료될 때까지 계속 실행됩니다. 백그라운드에서 실행 중인 명령을 실행해야 하고 cron에 의존하고 싶지 않을 때 유용할 수 있습니다.

중요: 위 방법을 사용할 때는 명령이 실행을 완료하기에 충분한 시간 간격을 설정하는 것이 매우 권장됩니다.

결론

이 튜토리얼의 샘플은 유용하지만 cron 유틸리티를 완전히 대체하기 위한 것은 아닙니다. 어떤 것이 더 잘 작동하는지 찾는 것은 여러분에게 달려 있지만, 두 기술의 사용을 분리해야 한다면 다음과 같이 말할 수 있습니다:

  1. 시스템 재부팅 후에도 주기적으로 명령을 실행해야 할 때는 cron을 사용하세요.
  2. 이 튜토리얼에서 설명한 방법을 사용하여 현재 사용자 세션 내에서 실행되는 프로그램/스크립트에 대해 사용하십시오.

언제든지 질문이나 의견이 있으면 아래 댓글 섹션에 제출하시기 바랍니다.

Source:
https://www.tecmint.com/run-repeat-linux-command-every-x-seconds/