ここでコマンドを使用してタスクを修正してみてくださいat
。
これを行う方法についてのアイデアはありますか?
リスト、削除、実行が可能でしたが、変更することはできません。
答え1
シェル言語自体のタイプミスを変更する必要がある場合は、ディレクトリ内のタスクを見つけます/var/spool/cron/atjobs
。
# type -p date | at 1430
warning: commands will be executed using /bin/sh
job 2 at Fri Aug 23 14:30:00 2019
# atq
2 Fri Aug 23 14:30:00 2019 a root
# ls /var/spool/cron/atjobs/
a00002018e67ea*
# cat /var/spool/cron/atjobs/a00002018e67ea
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
LESSCLOSE=/usr/bin/lesspipe\ %s\ %s; export LESSCLOSE
LANG=en_US.UTF-8; export LANG
LESS=-X; export LESS
EDITOR=/usr/bin/vi; export EDITOR
USER=root; export USER
PAGER=/usr/bin/less; export PAGER
PWD=/root; export PWD
HOME=/root; export HOME
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop; export XDG_DATA_DIRS
MAIL=/var/mail/root; export MAIL
SHLVL=1; export SHLVL
LOGNAME=root; export LOGNAME
XDG_RUNTIME_DIR=/run/user/0; export XDG_RUNTIME_DIR
PATH=/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/root/bin; export PATH
LESSOPEN=\|\ /usr/bin/lesspipe\ %s; export LESSOPEN
cd /root || {
echo 'Execution directory inaccessible' >&2
exit 1
}
/bin/date
ジョブが実行された日時の変更に関して、その日時はジョブのファイル名でエンコードされます。私たちが仮定すると:
# ls -ltr /var/spool/cron/atjobs/
total 12
-rwx------ 1 root daemon 1054 Aug 23 13:58 a00002018e67ea*
-rwx------ 1 root daemon 1054 Aug 23 14:03 a00003018e67eb*
-rwx------ 1 root daemon 1054 Aug 23 14:03 a00004018e67e9*
# atq
2 Fri Aug 23 14:30:00 2019 a root
3 Fri Aug 23 14:31:00 2019 a root
4 Fri Aug 23 14:29:00 2019 a root
a00003018e67eb
その後、ディレクトリのファイル名は/var/spool/cron/atjobs
次のように構成されます。
a
「キュー識別子」(a
atq リストから)です。00003
位置番号3の(16進数)表現です。018e67eb
ジョブ実行時間を16進数で表現したものです。
16進値は018e67eb
10進数で26109931です。 26109931 * 60 = 1566595860で、エポックから1566595860秒が私のタイムゾーンの2019年8月23日金曜日の午後2時31分なので、エポックを数分経過したようです。