它是什么?

它是什么?

它是什么?

我已经建立了自己的作业排队系统,效果很好。用户可以输入他们想要使用的核心(线程)数量以及他们的程序将被终止的最长时间。队列系统通过文件进行通信。特别是,存在以下可执行文件和文件:

文件

root jobq     0 Jun 29 10:53 .commands
root jobq 45591 Jun 29 10:52 log.txt
root jobq     0 Jun 29 10:53 .queue
root jobq    48 Jun 29 10:52 .status
root jobq    30 Jun 28 08:40 .system_buffer

可执行文件

root jobq    52 Jun 22 08:36 .jobq_exec
root jobq 1100896 Jun 22 08:36 jobq_server
root jobq     271 Jun 22 08:36 jobq_server_start
root jobq  364072 Jun 22 08:36 jobq_server_stop
root jobq  363928 Jun 22 08:36 jobq_status
root jobq  368112 Jun 22 08:36 jobq_stop
root jobq  372512 Jun 22 08:36 jobq_submit

它的工作原理:

jobq_server_start是一个简单的 shell 脚本,它检查名为 jobq_server 的进程是否正在运行,如果没有,将尝试启动它。

jobq_server_stop将写入.commands文件。

jobq_status将写入.commands文件并从文件中读取.status

jobq_submit将写入 .queue 文件。

.jobq_exec是一个 shell 脚本,将通过 启动作业taskset,该脚本通过命令行参数传递并重定向输出

.jobq_stop将写入.commands文件

jobq_server是一个二进制文件,它将读取和写入.commandslog.txt.queue.status.system_buffer

问题

目前一切都由一个用户使用(jobq),由不同的人共享。我想设置文件限制,以便

  • 每个用户只能以自己的身份运行jobq_submitjobq_statusjobq_stop命令(因此他们需要以例如 身份登录johndoe,而不是以 身份登录jobq)。如果可能的话,不应允许他们直接编辑文本文件(.commands.queue)。
  • 每个作业将以提交该作业的用户身份启动(因此只能停止他们启动的作业)。这可能意味着.job_exec需要更改脚本(见下文)以切换到用户。我认为这也意味着服务器只能以 root 身份启动,这很好。

脚本信息

.jobq_exec

#!/bin/bash
cd $1
$5 1> $2 2> $3 &
echo $! > $4 2>&1

用法(这是由服务器二进制文件执行的)

.job_exec 1:working_directory 2:out_file 3:err_file 4:buffer_file 5:'taskset -ac 1,2,3,4 command cmd_args...'

(为了清楚起见添加了参数编号)

附加信息

我正在运行 Linux Mint 20.3 Una

uname -r
5.4.0-105-generic

相关内容