프로세스가 완료되면 알림 이메일을 보낼 수있는 프로그램이 있습니까? 각각 8-24 코어에서)을 실행하고 있음을

나는 계산 과학자이며 Linux에서 많은 계산을 수행합니다. 특히 GROMACS 패키지를 사용하여 분자 역학 (MD) 시뮬레이션을 실행 합니다. 이러한 시뮬레이션은 8 ~ 24 개의 코어에서 실행되는 데 며칠 또는 몇 주가 걸릴 수 있습니다. 클러스터의 여러 노드에 액세스 할 수 있습니다. 즉, 주어진 시간에 약 4 또는 5 개의 작업 (각각 다른 노드에서 각각 8-24 코어에서)을 실행하고 있음을 의미합니다.

문제는 시뮬레이션에 다양한 시간이 걸린다는 것입니다. 모든 노드를 24 시간 내내 시뮬레이션 작업을 유지하고 싶지만 새 시뮬레이션을 시작하려면 터미널에 로그인하여 수동 작업을 수행해야합니다. 그러나 시뮬레이션에 남은 시간이 항상 잊어 버려서 항상 지속적으로 확인합니다.

Linux 프로세스가 완료되면 이메일을받을 수있는 방법이 있습니까? 이를 수행하는 Linux 프로그램이있을 수 있습니까? 그러면 터미널에 언제 로그인하고 다음 시뮬레이션을 준비해야하는지 알 수 있습니다.

우분투 리눅스를 사용하고 있습니다. 시간 내 줘서 고마워.



답변

at데몬에 제출 된 작업 은 완료시 stderr 및 stdout에서 출력을 보냅니다. 작업에 출력이없는 경우에도 메일을 보내도록 구성 할 수도 있습니다. 또한 제어 터미널 없이도 실행할 수 있다는 이점이 있으므로 터미널을 닫으면 작업에 미치는 영향에 대해 걱정할 필요가 없습니다.

예:

echo "/opt/product/bin/job.sh data123"|at -m NOW

이 작업이 완료되면 작업을 제출 한 사용자에게 이메일이 발송되고 출력이 있으면 이메일을 받게됩니다. LOGNAME환경 변수를 변경하여 이메일 수신자를 변경할 수 있습니다 .

at시스템이 사용 중이 아닐 때 실행할 작업을 큐에 대기 할 수있는 배치 모드가 있습니다. 여러 사용자가 리소스를 놓고 경쟁 할 때는이 큐잉 시스템이 좋지 않지만 그럼에도 불구하고 작업을 실행하려면 다음을 수행하십시오.

echo "/opt/product/bin/job.sh dataA"|batch
echo "/opt/product/bin/job.sh dataB"|batch
echo "/opt/product/bin/job.sh dataC"|batch

기본적으로 시스템로드가 1.5 미만인 경우가 아니라면 작업이 시작되지 않지만 해당로드 수치를 조정할 수 있습니다 (24 개의 코어를 사용해야합니다). 로드 제한을로드 제한 (1.5 기본값) 이상으로 부딪치지 않으면 병렬로 실행할 수 있거나 1.5 이상으로 개별적으로로드를 부딪 치면 직렬로 실행됩니다.

로 작업 대기열을보고 다음으로 작업을 atq삭제할 수 있습니다.atrm

답변 종속성 :

  1. atd데몬 실행 ( ps -ef|grep atd)
  2. 작업을 제출할 수 있습니다 atd( /etc/at.deny/ /etc/at.allow구성에 의해 거부되지 않음 )
  3. 기능성 sendmailMTA

대부분의 시스템에는 이러한 요구 사항에 문제가 없지만 확인해야합니다.


답변

예, 있습니다

command; echo "Process done" | mail -s "Process done" mail@domain.tld

-s “text”가 제목 인 경우, echo는 사용자에게 보낼 텍스트를 메일에 제공합니다.


답변

전자 메일을 보내도록 Python 스크립트를 설정하는 것이 좋습니다. 사용하는 서비스에 따라 올바른 메일 서버를 작성하고 구성하기가 매우 쉽습니다. 그들은 다음과 같이 보입니다 :

#!/usr/bin/python

import smtplib

sender = 'from@fromdomain.com'
receivers = ['to@todomain.com']

message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
Subject: SMTP e-mail test

This is a test e-mail message.
"""

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print "Successfully sent email"
except SMTPException:
   print "Error: unable to send email"

다른 답변에서 제안 된 파이프 연산자와 함께 이것을 사용하십시오.

이 문제에 대해 찾은 또 다른 훌륭한 솔루션은 Pushover를 사용하는 것 입니다. 푸시 오버- “푸시 오버를 사용하면 Android 및 iOS 장치로 실시간 알림을 쉽게 보낼 수 있습니다.” 빌드가 완료되면 휴대 전화로 메시지를 보내도록 쉬운 API를 만들 수있는 간단한 스크립트를 설정했습니다.

curl -s \
  -F "token=APP_TOKEN" \
  -F "user=USER_KEY" \
  -F "message=The build is done." \
  https://api.pushover.net/1/messages.json


답변

trap프로세스 종료시 또는 프로세스의 중단, 중단 또는 종료시 메일을 보내기 위해 명령을 사용할 수도 있습니다 . 스크립트 상단에 배치해야하는 코드는 다음과 같습니다.

    trap 'mail -s "Process done" mail@domain.tld' exit # It will mail on normal exit
    trap 'mail -s "Process interrupted" mail@domain.tld' INT HUP# it will mail on interrupt or hangup  of the process

아룬


답변

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


답변

나에게 맞는 집에서 만든 스크립트 가 있습니다. 용법:

mail-after <your command>

제목에 의미있는 정보가 있고 본문에 프로세스 출력이 포함 된 전자 메일을 보냅니다.

설치 지침은 GitHub 저장소기본 페이지에 있습니다. 현재 symlink가 생성 된 모든 스크립트에 대해 ~/bin.


답변

프로그램이 이미 실행 중이라고 가정하면 bash + pgrep을 사용하여 시청하십시오.

# Check that "pgrep $PROGRAM" returns the rid PID.
PROGRAM=foo
RECIPIENTS=you@yours.com
echo Watching $PROGRAM; while pgrep $PROGRAM &>/dev/null ; do sleep 1; echo -ne "."; done ; echo "$PROGRAM process done" | /bin/mail -s "$PROGRAM process done" $RECIPIENTS;