프로세스가 완료되면 알림 이메일을 보낼 수 있는 프로그램이 있나요?

프로세스가 완료되면 알림 이메일을 보낼 수 있는 프로그램이 있나요?

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

문제는 시뮬레이션에 소요되는 시간이 가변적이라는 것입니다. 나는 모든 노드가 연중무휴로 시뮬레이션을 실행하는 것을 좋아하지만, 새로운 시뮬레이션을 시작하려면 터미널을 사용하여 로그인하고 몇 가지 수동 작업을 수행해야 합니다. 그런데 시뮬레이션 시간이 얼마나 남았는지 항상 잊어버리기 때문에 항상 계속 확인하고 있어요.

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

저는 우분투 리눅스를 사용하고 있습니다. 시간 내 주셔서 감사합니다.

답변1

command; echo "Process done" | mail -s "Process done" [email protected]

-s "text"가 제목인 경우 echo는 메일에 보낼 텍스트를 제공합니다.

답변2

데몬에 제출된 작업은 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/config에 의해 거부 되지 않고 작업을 제출할 수 있습니다./etc/at.deny/etc/at.allow
  3. 기능성 sendmailMTA

대부분의 시스템은 이러한 요구 사항을 충족하지만 확인해 볼 가치가 있습니다.

답변3

이메일을 보내려면 Python 스크립트를 설정하는 것이 좋습니다. 사용하는 서비스에 관계없이 올바른 메일 서버를 작성하고 구성하기 쉽습니다. 그것들은 다음과 같습니다:

#!/usr/bin/python

import smtplib

sender = '[email protected]'
receivers = ['[email protected]']

message = """From: From Person <[email protected]>
To: To Person <[email protected]>
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 - "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

답변4

나는 썼다process_watcher.py

process_watcher --pid 1234 --to [email protected]

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

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 [email protected] --to [email protected]

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 이슈를 생성해 주세요.

관련 정보