Post

不使用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.
Total hits!