|
做计算经常和超算的 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"
复制代码
|
评分 Rate
-
查看全部评分 View all ratings
|