at
3시간 후에 작업이 실행되도록 예약한다고 가정해 보겠습니다 .
$ echo command | at now +3 hours
$ atq
9 Mon Dec 5 14:00:00 2016 a nr
그러나 1시간 후에 마음이 바뀌었고 #9
대기열에서 특정 작업을 즉시 실행 해야 했습니다 a
. 즉, 예정보다 2시간 일찍 실행해야 했습니다.
어떻게 해야 합니까?
작업 명령을 에 인쇄하고 stdout
복사하여 명령줄에 붙여넣고 수동으로 실행한 다음 작업을 삭제할 수 있다는 것을 알고 있습니다 #9
.
$ at -c 9
command
$ command
$ atrm 9
그러나 이것은 달리는 것과 같습니다다른#9
대기열에서가 아니라 작업하십시오 a
.
답변1
두 가지 가능성이 있습니다:
- 첫째, stackoverflow.com에 이에 대한 방법이 있습니다.
- 작업 번호는 보존됩니다.
둘째, 새로운 시간에 작업을 복사하려면 at을 사용하세요.
at -c 9 | at now + 1 hour -- reschedule job 9 from whenever to now + 1 hour atrm 9 -- Removed the old job
답변2
허용된 답변을 바탕으로 편의 스크립트는 다음과 같습니다 atmv
.
#!/usr/bin/bash
# Idea taken from here:
# https://unix.stackexchange.com/a/331789/68456
set -euo pipefail
atlist() { atq | sed 's/^/ /'; }
if [ $# -lt 2 ]; then
echo "Syntax: atmv job_num new time arguments"
exit 1
fi
job_num="$1"
shift
if [ "$(atq | cut -f 1 | grep "$job_num" | wc -l)" != "1" ]; then
echo "Error: There is no job with number \"$job_num\"."
echo "Pick one of these:"
atlist
exit 2
fi
at -c "$job_num" | at "$@" 2> /dev/null
atrm "$job_num"
echo "Done! This is the new list of at jobs:"
atlist