저는 컴퓨터 과학자이고 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
의존성 응답:
atd
데몬 실행 (ps -ef|grep atd
)atd
/config에 의해 거부 되지 않고 작업을 제출할 수 있습니다./etc/at.deny
/etc/at.allow
- 기능성
sendmail
MTA
대부분의 시스템은 이러한 요구 사항을 충족하지만 확인해 볼 가치가 있습니다.
답변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 이슈를 생성해 주세요.