不使用ssh连接到服务器进行科学计算的工作流设计
不使用ssh连接到服务器进行科学计算的工作流设计
组里新服务器的环境跟笔者之前白嫖的差别太大了,一时间有点不适应。如果完全复刻以前的计算模式显得太蠢,所以笔者打算利用手头的一些组件,搞一个纯windows完成计算的工作流出来。
主要记录inotify部分,其他部分都是长久积累出来的小工具😸
文件交流
这里显然要用SMB服务,把计算目录当本地文件一样操作,非常舒服,唯一的缺点是不能用wsl里的linux程序做后处理。
科学计算
提交计算任务
笔者给tasker套件写过一个扫描目录里的输入并自动提交的脚本slurms.sh
,附在tasker里了。由于目前服务器上装的是sge任务系统,要做一些修改。修改略。
触发计算
inotifywait可以监视目录下的文件变化,我们就使用这个软件监视特定的文件创建,来触发计算:
1
sudo dnf install inotify-tools
写一个脚本,监视计算目录:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/bash
# 设置要监视的目录
WATCH_DIR="{SMB共享出去的目录}"
# 设置触发文件名
TRIGGER_FILE="trigger.txt"
# 设置要执行的脚本路径
TARGET_SCRIPT="{脚本目录}"
# 创建日志文件
LOG_FILE="/var/log/share_monitor.log"
echo "$(date): 开始监视共享文件夹 $WATCH_DIR" >> $LOG_FILE
# 使用inotifywait监控文件变化
inotifywait -m -e create --format "%f" "$WATCH_DIR" | while read FILE
do
if [ "$FILE" = "$TRIGGER_FILE" ]; then
echo "$(date): 检测到触发文件,执行脚本" >> $LOG_FILE
# 执行目标脚本
bash "$TARGET_SCRIPT"
# 删除触发文件(可选)
rm "$WATCH_DIR/$TRIGGER_FILE"
echo "$(date): 脚本执行完毕,已删除触发文件" >> $LOG_FILE
fi
done
这样,当trigger.txt生成时,inotifywait就会让该脚本执行预定的程序。笔者这里用的就是前述slurms.sh
,扫描计算目录,并把任务交到作业调度系统里。
为了持续监控,创建一个systemd服务:
1
sudo vi /etc/systemd/system/share-monitor.service
编辑以下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=Monitor Shared Folder Service
After=network.target smb.service
[Service]
Type=simple
ExecStart=/bin/bash {script}
Restart=always
User={user}
Group={user}
[Install]
WantedBy=multi-user.target
其中:
- {script}是刚刚的inotify监控脚本
- {user}是你的用户名
还可以放一个批处理脚本触发计算:
1
2
@echo off
echo Go to work you lazy system > Z:\trigger.txt
自动后处理
这个流程既然用到了slurms.sh
,那就顺理成章地可以使用tasker,用taskfile规定后处理逻辑。
This post is licensed under CC BY 4.0 by the author.