프로세스 실행 완료시 경고


21

프로세스가 완료 / 종료 될 때 경고되는 것과 관련하여 여기에 대한 몇 가지 질문과 답변이 있습니다. ( 1 , 2 ) – 이들은 모두 사용자가 해당 프로세스를 직접 발행했다고 가정하여 경고 메시지를 스크립트로 작성할 수 있습니다. 스크립트를 관리하거나 프로세스를 일종의 경고로 파이프하십시오.

내 상황은 사용자가 초기화하지 않은 프로세스의 완료 / 종료에 대해 경고하고 싶습니다. 즉, Ubuntu 12.04 LTS 서버에서 대규모 비디오 파일을 대량 처리하고 있습니다. 이러한 파일에 대한 특정 작업은 시간이 오래 걸리므로 특정 파일이 완료되면 일종의 경고 (이메일이 좋을 것입니다)를 원합니다. PIT를 기반으로 수동으로 일회성으로이 작업을 수행하면 시간이 너무 오래 걸립니다.

더 많은 정보를 제공하기 위해-특히 큰 파일을 처리하고 있는데 FFMPEG 스크립트로 진행되었다는 것을 알 수 있습니다. 프로세스 자체는 파이썬 스크립트입니다 (매우 복잡하고 직접 작성하지는 않습니다) 나는 수정하고 싶지 않다 – 비록 그것이 첫 번째 논리적 인 접근법 일 것이다). 나는 실행중인 파이썬 스크립트의 PID를 인수로 사용하여 명령이나 스크립트를 발행하는 것을 상상하고 그 PID를 가진 프로세스가 더 이상 실행되지 않으면 경고 스크립트가 그 일을합니다.

어떤 아이디어?


monit ( mmonit.com/monit/documentation )은 잠재적 옵션처럼 보이지만 필요한 것보다 훨씬 더 복잡합니다. 내가 요청한 것만 수행하는 더 간단하고 직접적이며 부풀어 오른 방법이 있기를 바랍니다. .
동글

답변:


9

process_watcher.py를 썼습니다

process_watcher --pid 1234 --to me@gmail.com

현재 이메일 본문은 다음과 같습니다.

PID 18851 : /usr/lib/libreoffice/program/soffice.bin --writer --splash-pipe = 5
시작 : 3 월 10 일 목요일 18:33:37 종료 : 3 월 10 일 목요일 18:34:26 (지속 시간 0 : 00 : 49)
메모리 (현재 / 피크)-상주 : 155,280 / 155,304 kB 가상 : 1,166,968 / 1,188,216 kB

[+] indicates the argument may be specified multiple times, for example:
 process-watcher -p 1234 -p 4258 -c myapp -c "exec\d+" --to person1@domain.com --to person2@someplace.com

optional arguments:
  -h, --help            show this help message and exit
  -p PID, --pid PID     process ID(s) to watch [+]
  -c COMMAND_PATTERN, --command COMMAND_PATTERN
                        watch all processes matching the command name. (RegEx pattern) [+]
  -w, --watch-new       watch for new processes that match --command. (run forever)
  --to EMAIL_ADDRESS    email address to send to [+]
  -n, --notify          send DBUS Desktop notification
  -i SECONDS, --interval SECONDS
                        how often to check on processes. (default: 15.0 seconds)
  -q, --quiet           don't print anything to stdout

개선이 필요한 경우 GitHub 문제를 해결하십시오.


23

이 같은?

(while kill -0 $pid; do sleep 1; done) && echo "finished"

$pid프로세스 ID와 echo "finished"프로세스가 종료되었을 때 수행하려는 작업으로 바꿉니다 .

예를 들면 다음과 같습니다.

(while kill -0 $pid; do sleep 1; done) && mail ...

놀랍습니다! 매력처럼 작동합니다.
동글

1
사소한 (그리고 아마도 명백한) 주 – 상기 프로세스가 사용자에 의해 소유되지 않은 경우, 킬을 죽여야합니다.
동글

1
적어도 내 RHEL 상자에서 @dongle은 존재하지 않는 pid 및 다른 사용자가 소유 한 pid에 대해 kill -0보고 하므로 오류 메시지를 해석 할 필요가 없습니다.No such processOperation not permittedsudo
iruvar

1
반향 echo -en "\007 \007 \007"이 발생하면 항상 '벨'을 발행 할 수 있습니다. 이것이 실제 가청 사운드로 변환되는지 여부는 터미널과 하드웨어에 따라 다릅니다 (그러나 일반적으로).
Morgon

5

&&첫 번째가 성공적으로 완료되면 두 번째 명령을 실행하는 데 사용 합니다. 다음은 몇 가지 예입니다.

  1. 큰 폴더를 삭제하고 경고음을 울립니다.

    rm -rv ~/tmp && beep
  2. 커널을 컴파일하고 이메일을 보내십시오 :

    make && mail -s "Compilation is done" user@yourmaildomain.com

이것이 문제를 해결하는 좋은 방법입니까? 다른 경우 ||에는 실패시 및 세 번째 명령을 추가 할 수 있습니다 .

또한 쉘 스크립트는 명령 의 종료 상태 ( $?)를 수신 if/else할 수 있으며 원하는대로 수행하고 루프 할 수 있습니다.


고맙습니다 Willian, 그러나 내가 말했듯이, 유스 케이스의 특정 과제는 이것이 발행하는 명령이 아니라 이미 실행중인 프로세스라는 것입니다. 따라서 &&는 옵션이 아닙니다. 어쨌든 고마워
동글

4

pid가 없으면 ffmpeg의 모든 인스턴스가 완료 될 때까지 실행됩니다.

(while pidof ffmpeg | grep -q "[0-9]?"; do sleep 1; done) && echo "finished"

0

폴링 옵션이나 외부 스크립트를 사용하지 않고 장기 실행 프로세스를 이미 시작한 경우 CTRL + Z (SIGTSTP 신호 전송)로 일시 중단 한 다음 다시 시작 fg(프로세스로 이동) 전경).

예를 들면 다음과 같습니다.

my_command  # long running command
# press CTRL+Z to pause
fg ; notify-send 'finished'

예외적으로 ... "제 상황은 사용자가 초기화하지 않은 프로세스의 완료 / 종료에 대해 경고하고 싶습니다."
Jeff Schaller

-1

프로세스가 끝나면 안드로이드 폰에 알림을 보내어 컴퓨터에 테 더링 할 필요가없는 앱을 만들었습니다.

설치 한 다음 ;notifier.sh명령 끝에 추가 하십시오.

예를 들어, 명령이 인 경우 명령을 make install작성하십시오.

make install; notifier.sh

https://notifier.sh

https://play.google.com/store/apps/details?id=sh.notifier


“… 그러나이 모든 것은 사용자가 해당 프로세스를 직접 발행했다고 가정하므로 제어 스크립트에 내장 된 경고를 사용하여 스크립트를 작성하거나 프로세스를 일종의 경고로 파이프 할 수 있습니다. / 제 상황은 사용자가 초기화하지 않은 프로세스의 완료 / 종료에 대해 경고하고 싶습니다.”
G-Man은
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.