특정 시점에 작업 대기열 생성

특정 시점에 작업 대기열 생성

UNIX는 특정 시간에 주기적으로 시작되는 대기열을 생성한 다음 해당 시간에 순차적으로 실행될 해당 대기열에 일부 작업을 점진적으로 추가할 수 있는 방법을 제공합니까?

나는 cron및 을 알고 있지만 at,

  • cron대기열 시스템이 없습니다.
  • at순차적 작업은 지원되지 않는 것 같고, 작업 목록이 매우 불친절하게 나열되어 있습니다. ("모두 나열"은 작업 번호와 날짜만 출력하고, 단일 작업에 대한 정보는 전체 작업을 출력합니다 env.)

나는 다음과 같은 것을 상상합니다.

$ create queue a at midnight
$ add "ffmpeg -i a.mkv a.mp4" to a
$ add "ffmpeg -i b.mkv b.mp4" to a
$ add "ffmpeg -i c.mkv c.mp4" to a

$ create queue b at noon
$ add "mysqldump ..." to b

$ list queue a
RUNNING  ffmpeg -i b.mkv b.mp4
NEXT     ffmpeg -i c.mkv c.mp4

$ mail
>N 1 Task Daemon Thu Sep 1 00:23 <user@localhost> ffmpeg -i a.mkv a.mp4

참고로 실제로 필요한 것은 밤에 CPU/시간이 많이 소요되는 작업을 예약하는 것입니다. 이때 노트북은 문이 닫힌 방에 있어서 팬 소리가 들리지 않습니다(또는 CPU가 끓어오르는 열기를 느낄 수 없습니다).

답변1

비난할 수도 있지만 at, 사용하면 원하는 효과를 어느 정도 얻을 수 있습니다.일괄특징. at명령에 대기열에 대해 단일 대문자 이름을 지정 하면 -q M해당 대기열의 모든 명령은 요청된 시간에만 실행됩니다.만약에시스템 로드가 0.8 미만인 경우 작업 시작 사이에 60초의 간격이 있습니다.

-l-b옵션과 데몬을 사용하여 로드와 간격을 변경할 수 있습니다 atd. 작업은 제출 순서대로 실행되며 atq -q M지정된 대기열의 작업만 나열됩니다.

답변2

Cron과 at은 Unix 시스템에 일반적으로 설치되는 유일한 것입니다. 하지만 매니아가 더 많죠작업 스케줄링 시스템저기. 작업을 대기열에 추가하는 표준 인터페이스가 있습니다.qsub. 다음 자정에 작업을 예약하려면 다음 단계를 따르세요.

{ echo '#!/bin/sh'; echo 'ffmpeg -i a.mkv a.mp4'; } >a.script
qsub -a $(date -d 'tomorrow 0:00' +%Y%m%d%H%M) a.script

Ubuntu에는 POSIX(NQS 파생) 인터페이스를 구현하는 두 가지 작업 스케줄러가 포함되어 있습니다.토크그리고진흙. 다른 오픈 소스 구현이 있으며 하나를 선택하는 데 특별한 조언이 없습니다.

답변3

이것이 (주기적인 작업이 아닌) 단일 실행 작업인 경우 가장 쉬운 방법은 tmux및 를 사용하는 것입니다 sleep. tmux 세션을 열고 다음을 수행합니다.

$ echo "ffmpeg -i a.mkv a.mp4" > midnight.sh
$ echo "ffmpeg -i b.mkv b.mp4" >> midnight.sh
$ let secs_till_midnight=$(date -d "`date -d '+1 day' +%F`" +%s)-$(date +%s)
$ sleep $secs_till_midnight && sh midnight.sh

동일한 세션의 새 창/창에서 더 많은 작업을 예약하고 완료되면 세션에서 분리하세요. 그게 다야! 나만의 홈메이드 스케줄러!

midnight.sh실행 중인 작업을 나열할 수 없는 경우에도 가시성을 높이기 위해 시작 부분에 다음 두 줄을 추가할 수 있습니다 .

set -x
exec 2>midnight_err >midnight_out

이제 각 명령은 실행되기 전에 터미널에 출력되며 해당 명령의 모든 출력은 midnight_*파일로 리디렉션됩니다.

이제 해당 세션이나 tail로그 파일에 추가하여 상태를 확인하세요!

관련 정보