그것은 무엇입니까?

그것은 무엇입니까?

그것은 무엇입니까?

나는 나만의 작업 대기열 시스템을 구축했는데 훌륭하게 작동합니다. 사용자는 사용하려는 코어(스레드) 수와 프로그램이 종료되는 최대 시간을 입력할 수 있습니다. 대기열 시스템은 파일을 통해 통신합니다. 특히 다음과 같은 실행 파일과 파일이 존재합니다.

문서

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_startjobq_server라는 프로세스가 실행 중인지 확인하고 그렇지 않은 경우 시작을 시도하는 간단한 쉘 스크립트입니다.

jobq_server_stop.commands파일 에 기록됩니다 .

jobq_status파일 에 쓰고 .commands파일에서 읽습니다 .status.

jobq_submit.queue 파일에 기록됩니다.

.jobq_exectaskset명령줄 인수를 통해 작업을 전달하고 출력을 리디렉션하여 작업을 시작하는 쉘 스크립트입니다.

.jobq_stop.commands파일 에 쓸 것입니다

jobq_server.commands, 및 를 log.txt읽고 쓰는 바이너리 파일입니다 ..queue.status.system_buffer

질문

현재 모든 것은 한 명의 사용자( jobq)가 사용하고 있으며 여러 사람이 공유하고 있습니다. 파일 제한을 설정하고 싶습니다.

  • jobq_submit각 사용자는 및 명령 jobq_status을 스스로 실행할 수만 있습니다. 따라서 예를 들어 as가 아닌 as jobq_stop로 로그인해야 합니다 . 가능하다면 텍스트 파일을 직접 편집하는 것을 허용하지 마십시오( , ).johndoejobq.commands.queue
  • 각 작업은 작업을 제출한 사용자로 시작됩니다. 따라서 해당 사용자가 시작한 작업만 중지할 수 있습니다. 이는 .job_exec사용자로 전환하려면 스크립트(아래 참조)를 변경해야 함을 의미할 수 있습니다. 나는 이것이 또한 서버가 루트로만 시작될 수 있다는 것을 의미한다고 생각합니다. 이는 괜찮습니다.

스크립트 정보

.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

관련 정보