它是什么?
我已经建立了自己的作业排队系统,效果很好。用户可以输入他们想要使用的核心(线程)数量以及他们的程序将被终止的最长时间。队列系统通过文件进行通信。特别是,存在以下可执行文件和文件:
文件
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
是一个二进制文件,它将读取和写入.commands
、log.txt
、.queue
和.status
。.system_buffer
问题
目前一切都由一个用户使用(jobq
),由不同的人共享。我想设置文件限制,以便
- 每个用户只能以自己的身份运行
jobq_submit
、jobq_status
和jobq_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