计算化学公社
标题:
计算任务开始结束消息推送脚本
[打印本页]
作者Author:
Puying
时间:
2025-5-10 13:58
标题:
计算任务开始结束消息推送脚本
做计算经常和超算的 PBS 和 slurm 任务管理系统打交道,但是对于任务什么时候开始和结束总是很懵逼。虽然PBS 和 slurm 可以设置通知邮箱,但是有的任务系统部署的并不完善,邮箱发送会失败;另外一方面是我觉得邮箱太重了,个人不是很喜欢。这里分享一个消息推送脚本,可以把 PBS任务开始和结束的信息推送到手机,slurm 脚本修改对应的环境变量即可。
我用的是自己部署的 gotify用于安卓端,需要有公网服务器和域名,比较麻烦。最近 clawcloud 推出了免费的 docker 部署平台,可以尝试。苹果端可以用 bark app,官方服务器也挺快的,免除了自己部署的麻烦。
另外一个方法是使用免费的消息推送平台,比如 pushplus可以把消息推送到微信上等等,每天几百条免费额度,自用完全够了。此外还有 pushover,server chan,ntfy 等等,推送平台很多很丰富。对于不同的推送平台,需要修改下面脚本里面的 curl 命令,大同小异。问一下 AI即可。
pbs 或者 slurm 脚本中需要插入的部分:
start_time=$(bash start_inform.sh)
# === 你的计算任务 ======================
g16 < DME-opt.gjf > DME-opt.log
# ========================================
bash complete_inform.sh $start_time $?
复制代码
对于安卓的gotify平台,需要app常驻后台。
start_inform.sh的内容,需要修改的是curl命令后面的服务器网址和对应的token:
#!/bin/bash
# Job start inform
start_time=$(date +%s)
start_time_str=$(date "+%Y-%m-%d %H:%M:%S")
curl -X POST "https://gotify.your_server.com/message?token=your_token" \
-H "Content-Type: application/json" \
--data '{
"title": "PBS Job started",
"message": "'"Job ID: ${PBS_JOBID}\n开始时间: ${start_time_str}"'",
"priority": 3
}' >>/dev/null 2>&1
echo $start_time $start_time_str
复制代码
complete_inform.sh的内容,需要修改的是curl命令后面的服务器网址和对应的token:
#!/bin/bash
# Job Complete inform
job_exit_code=$4
start_time=$1
start_time_str=$2_$3
end_time=$(date +%s)
end_time_str=$(date "+%Y-%m-%d %H:%M:%S")
duration=$((end_time - start_time))
# 格式化时长(时:分:秒)
duration_fmt=$(printf "%02d:%02d:%02d" $((duration/3600)) $(( (duration%3600)/60 )) $((duration%60)))
# 判断是否正常结束
if [ $job_exit_code -eq 0 ]; then
status="✅ 正常结束"
else
status="❌ 异常退出(exit code: $job_exit_code)"
fi
curl -X POST "https://gotify.your_server.com/message?token=Your_token" \
-H "Content-Type: application/json" \
--data '{
"title": "PBS Job Completed",
"message": "'"Job ID: ${PBS_JOBID}\n状态: ${status}\n开始时间: ${start_time_str}\n结束时间: ${end_time_str}\n总时长: ${duration_fmt}"'",
"priority": 3
}'
复制代码
对于苹果手机,可以使用bark app。由于使用了苹果的推送渠道,推送更省电更及时。
start_inform.sh,需要修改的是服务器地址和对应的device_key
#!/bin/bash
# Job start inform
start_time=$(date +%s)
start_time_str=$(date "+%Y-%m-%d %H:%M:%S")
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"title": "PBS Job Started ",
"body": "'"Job ID: ${PBS_JOBID} \n开始时间: ${start_time_str} "'",
"device_key": "your_key",
"badge": 1,
"sound": "minuet.caf",
"icon": "https://example.com/icon.png"
}' \
"https://bark.your_server.com/push" >>/dev/null 2>&1
echo $start_time $start_time_str
复制代码
complete_inform.sh,需要修改的是服务器地址和对应的device_key
#!/bin/bash
# Job Complete inform
job_exit_code=$4
start_time=$1
start_time_str="$2 $3"
end_time=$(date +%s)
end_time_str=$(date "+%Y-%m-%d %H:%M:%S")
duration=$((end_time - start_time))
# 格式化时长(时:分:秒)
duration_fmt=$(printf "%02d:%02d:%02d" $((duration/3600)) $(( (duration%3600)/60 )) $((duration%60)))
# 判断是否正常结束
if [ $job_exit_code -eq 0 ]; then
status="✅ 正常结束"
else
status="❌ 异常退出(exit code: $job_exit_code)"
fi
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"title": "PBS Job Completed ",
"body": "'"Job ID: ${PBS_JOBID}\n状态: ${status}\n开始时间: ${start_time_str}\n结束时间: ${end_time_str}\n总时长: ${duration_fmt}"'",
"device_key": "your_key",
"badge": 1,
"sound": "minuet.caf",
"icon": "https://example.com/icon.png"
}' \
"https://bark.your_server.com/push"
复制代码
作者Author:
wal
时间:
2025-5-10 21:00
好东西 之前做了个分析出周期性震荡后发邮件报警的脚本 这下可以换代了
作者Author:
Stardust0831
时间:
2025-5-11 23:37
太伟大了,这样能方便不少啦
作者Author:
Puying
时间:
2025-5-12 14:15
苹果端无脑推 bark,官方服务器就挺快的,不用自己搭服务器。安卓端可以用 ntfy,每天免费 250 条,也是推荐使用官方服务器。
作者Author:
abin
时间:
2025-5-12 15:12
好多年前, 有一个东西叫做飞信。
计算服务器,server,只有内线网络;
自己用的机器, desktop,具有互联网。
所以大致方案就是, desktop上写监控,主动去Server获取信息,然后在Desktop上调用飞信发送信息。
通知通过手机短信息传递。
那个时候, 智能触屏手机还是稀缺货。
后来移动把飞信玩挂了。
也可以使用139或者189邮件来接收通知,
移动或者电信也是即时通知的。
或者,授权微信访问139/189电邮, 那么推送通知,将由微信提供。
建议设定晚间不要发送通知,要不然烦死了。
作者Author:
狼道
时间:
2025-5-12 15:26
太实用了
作者Author:
tonganlhy
时间:
2025-5-12 18:10
推微信挺好的
欢迎光临 计算化学公社 (http://bbs.keinsci.com/)
Powered by Discuz! X3.3