프로세스 실행 완료시 경고 스크립트를 관리하거나 프로세스를 일종의 경고로 파이프하십시오. 내

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

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

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

어떤 아이디어?



답변

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 문제를 해결하십시오.


답변

이 같은?

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

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

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

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

답변

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

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

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

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

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

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


답변

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

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

답변

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

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

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

답변

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

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

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

make install; notifier.sh

https://notifier.sh

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