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
2つの可能性があります。
- まず、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