计算化学公社

 找回密码 Forget password
 注册 Register
Views: 569|回复 Reply: 6
打印 Print 上一主题 Last thread 下一主题 Next thread

[综合交流] 计算任务开始结束消息推送脚本

[复制链接 Copy URL]

60

帖子

3

威望

1736

eV
积分
1856

Level 5 (御坂)

做计算经常和超算的 PBS 和 slurm 任务管理系统打交道,但是对于任务什么时候开始和结束总是很懵逼。虽然PBS 和 slurm 可以设置通知邮箱,但是有的任务系统部署的并不完善,邮箱发送会失败;另外一方面是我觉得邮箱太重了,个人不是很喜欢。这里分享一个消息推送脚本,可以把 PBS任务开始和结束的信息推送到手机,slurm 脚本修改对应的环境变量即可。

我用的是自己部署的 gotify用于安卓端,需要有公网服务器和域名,比较麻烦。最近 clawcloud 推出了免费的 docker 部署平台,可以尝试。苹果端可以用 bark app,官方服务器也挺快的,免除了自己部署的麻烦。
另外一个方法是使用免费的消息推送平台,比如 pushplus可以把消息推送到微信上等等,每天几百条免费额度,自用完全够了。此外还有 pushover,server chan,ntfy 等等,推送平台很多很丰富。对于不同的推送平台,需要修改下面脚本里面的 curl 命令,大同小异。问一下 AI即可。

pbs 或者 slurm 脚本中需要插入的部分:
  1. start_time=$(bash start_inform.sh)
  2. # === 你的计算任务 ======================

  3. g16 < DME-opt.gjf > DME-opt.log

  4. # ========================================
  5. bash complete_inform.sh $start_time $?
复制代码

对于安卓的gotify平台,需要app常驻后台。
start_inform.sh的内容,需要修改的是curl命令后面的服务器网址和对应的token:
  1. #!/bin/bash
  2. # Job start inform
  3. start_time=$(date +%s)
  4. start_time_str=$(date "+%Y-%m-%d %H:%M:%S")

  5. curl -X POST "https://gotify.your_server.com/message?token=your_token" \
  6.      -H "Content-Type: application/json" \
  7.      --data '{
  8.        "title": "PBS Job started",
  9.        "message": "'"Job ID: ${PBS_JOBID}\n开始时间: ${start_time_str}"'",
  10.        "priority": 3
  11.      }' >>/dev/null 2>&1
  12. echo $start_time $start_time_str
复制代码


complete_inform.sh的内容,需要修改的是curl命令后面的服务器网址和对应的token:
  1. #!/bin/bash
  2. # Job Complete inform
  3. job_exit_code=$4
  4. start_time=$1
  5. start_time_str=$2_$3
  6. end_time=$(date +%s)
  7. end_time_str=$(date "+%Y-%m-%d %H:%M:%S")
  8. duration=$((end_time - start_time))

  9. # 格式化时长(时:分:秒)
  10. duration_fmt=$(printf "%02d:%02d:%02d" $((duration/3600)) $(( (duration%3600)/60 )) $((duration%60)))

  11. # 判断是否正常结束
  12. if [ $job_exit_code -eq 0 ]; then
  13.     status="✅ 正常结束"
  14. else
  15.     status="❌ 异常退出(exit code: $job_exit_code)"
  16. fi

  17. curl -X POST "https://gotify.your_server.com/message?token=Your_token" \
  18.      -H "Content-Type: application/json" \
  19.      --data '{
  20.        "title": "PBS Job Completed",
  21.        "message": "'"Job ID: ${PBS_JOBID}\n状态: ${status}\n开始时间: ${start_time_str}\n结束时间: ${end_time_str}\n总时长: ${duration_fmt}"'",
  22.        "priority": 3
  23.      }'
复制代码

对于苹果手机,可以使用bark app。由于使用了苹果的推送渠道,推送更省电更及时。
start_inform.sh,需要修改的是服务器地址和对应的device_key
  1. #!/bin/bash
  2. # Job start inform
  3. start_time=$(date +%s)
  4. start_time_str=$(date "+%Y-%m-%d %H:%M:%S")

  5. curl -X POST \
  6.   -H "Content-Type: application/json" \
  7.   -d '{
  8.     "title": "PBS Job Started ",
  9.     "body": "'"Job ID: ${PBS_JOBID} \n开始时间: ${start_time_str} "'",
  10.     "device_key": "your_key",
  11.     "badge": 1,
  12.     "sound": "minuet.caf",
  13.     "icon": "https://example.com/icon.png"
  14.   }' \
  15.   "https://bark.your_server.com/push" >>/dev/null 2>&1
  16. echo $start_time $start_time_str
复制代码


complete_inform.sh,需要修改的是服务器地址和对应的device_key
  1. #!/bin/bash
  2. # Job Complete inform
  3. job_exit_code=$4
  4. start_time=$1
  5. start_time_str="$2 $3"
  6. end_time=$(date +%s)
  7. end_time_str=$(date "+%Y-%m-%d %H:%M:%S")
  8. duration=$((end_time - start_time))

  9. # 格式化时长(时:分:秒)
  10. duration_fmt=$(printf "%02d:%02d:%02d" $((duration/3600)) $(( (duration%3600)/60 )) $((duration%60)))

  11. # 判断是否正常结束
  12. if [ $job_exit_code -eq 0 ]; then
  13.     status="✅  正常结束"
  14. else
  15.     status="❌  异常退出(exit code: $job_exit_code)"
  16. fi

  17. curl -X POST \
  18.   -H "Content-Type: application/json" \
  19.   -d '{
  20.     "title": "PBS Job Completed ",
  21.     "body": "'"Job ID: ${PBS_JOBID}\n状态: ${status}\n开始时间: ${start_time_str}\n结束时间: ${end_time_str}\n总时长: ${duration_fmt}"'",
  22.     "device_key": "your_key",
  23.     "badge": 1,
  24.     "sound": "minuet.caf",
  25.     "icon": "https://example.com/icon.png"
  26.   }' \
  27.   "https://bark.your_server.com/push"
复制代码











Snipaste_2025-05-10_13-46-21.jpg (229.88 KB, 下载次数 Times of downloads: 119)

Snipaste_2025-05-10_13-46-21.jpg

评分 Rate

参与人数
Participants 10
eV +49 收起 理由
Reason
zjm123456 + 4 好物!
djjj148 + 5 好物!
spinel + 5 赞!
funok + 5 好物!
xyan11 + 5 好物!
北大-陶豫 + 5 好物!
LittlePupil + 3 GJ!
youngcosmos + 4 好物!
wal + 5 GJ!
sobereva + 8

查看全部评分 View all ratings

410

帖子

5

威望

1630

eV
积分
2140

Level 5 (御坂)

鸩羽

2#
发表于 Post on 2025-5-10 21:00:13 | 只看该作者 Only view this author
好东西 之前做了个分析出周期性震荡后发邮件报警的脚本 这下可以换代了
某不知名实验组从苞米地里长出来的计算选手

326

帖子

3

威望

1742

eV
积分
2128

Level 5 (御坂)

3#
发表于 Post on 2025-5-11 23:37:39 | 只看该作者 Only view this author
太伟大了,这样能方便不少啦

60

帖子

3

威望

1736

eV
积分
1856

Level 5 (御坂)

4#
 楼主 Author| 发表于 Post on 2025-5-12 14:15:31 | 只看该作者 Only view this author
苹果端无脑推 bark,官方服务器就挺快的,不用自己搭服务器。安卓端可以用 ntfy,每天免费 250 条,也是推荐使用官方服务器。

2407

帖子

1

威望

5948

eV
积分
8375

Level 6 (一方通行)

5#
发表于 Post on 2025-5-12 15:12:07 | 只看该作者 Only view this author
好多年前, 有一个东西叫做飞信。

计算服务器,server,只有内线网络;
自己用的机器, desktop,具有互联网。

所以大致方案就是, desktop上写监控,主动去Server获取信息,然后在Desktop上调用飞信发送信息。

通知通过手机短信息传递。
那个时候, 智能触屏手机还是稀缺货。

后来移动把飞信玩挂了。

也可以使用139或者189邮件来接收通知,
移动或者电信也是即时通知的。
或者,授权微信访问139/189电邮, 那么推送通知,将由微信提供。

建议设定晚间不要发送通知,要不然烦死了。

High-Performance Computing for You
为您专属定制的高性能计算解决方案

更多讯息,请访问:
https://labitc.top
http://tophpc.top:8080
电邮: ask@hpc4you.top

1

帖子

0

威望

39

eV
积分
40

Level 2 能力者

6#
发表于 Post on 2025-5-12 15:26:01 | 只看该作者 Only view this author
太实用了

309

帖子

0

威望

459

eV
积分
768

Level 4 (黑子)

7#
发表于 Post on 2025-5-12 18:10:14 | 只看该作者 Only view this author
推微信挺好的

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2025-8-12 23:40 , Processed in 0.179222 second(s), 25 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list