From a65c8762afc6d1b125e25414bba83958c91c230b Mon Sep 17 00:00:00 2001 From: dailz Date: Tue, 14 Apr 2026 13:06:51 +0800 Subject: [PATCH] fix(service): add environment variables and fix work directory permissions for Slurm job submission Slurm requires environment variables in job submission; without them it returns 'batch job cannot run without an environment'. Also chmod the entire directory path to 0777 to bypass umask, ensuring Slurm and compute node users can write. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- internal/service/application_service.go | 7 ++++++- internal/service/job_service.go | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/internal/service/application_service.go b/internal/service/application_service.go index 80cee2d..9034177 100644 --- a/internal/service/application_service.go +++ b/internal/service/application_service.go @@ -174,9 +174,14 @@ func (s *ApplicationService) SubmitFromApplication(ctx context.Context, applicat safeName := sanitizeDirName(app.Name) subDir := time.Now().Format("20060102_150405") + "_" + randomSuffix(4) workDir = filepath.Join(s.workDirBase, safeName, subDir) - if err := os.MkdirAll(workDir, 0755); err != nil { + if err := os.MkdirAll(workDir, 0777); err != nil { return nil, fmt.Errorf("create work directory %s: %w", workDir, err) } + // 绕过 umask,确保整条路径都有写权限 + for dir := workDir; dir != s.workDirBase; dir = filepath.Dir(dir) { + os.Chmod(dir, 0777) + } + os.Chmod(s.workDirBase, 0777) } req := &model.SubmitJobRequest{Script: rendered, WorkDir: workDir} diff --git a/internal/service/job_service.go b/internal/service/job_service.go index 7c8d72a..9beb771 100644 --- a/internal/service/job_service.go +++ b/internal/service/job_service.go @@ -44,6 +44,11 @@ func (s *JobService) SubmitJob(ctx context.Context, req *model.SubmitJobRequest) } } + jobDesc.Environment = slurm.StringArray{ + "PATH=/usr/local/bin:/usr/bin:/bin", + "HOME=/root", + } + submitReq := &slurm.JobSubmitReq{ Script: &script, Job: jobDesc,