尝试在这里从命令修改作业at
。
关于如何做有什么想法吗?
已设法列出、删除和执行它,但无法修改它。
答案1
如果您只需要修复 shell 语言本身的拼写错误,请在目录中查找您的工作/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
是职位编号的(十六进制)表示形式,3018e67eb
是作业运行时间的十六进制表示
十六进制值为018e67eb
十进制 26109931。这似乎是纪元过去的分钟,因为 26109931 * 60 = 1566595860 和纪元过去的 1566595860 秒是我所在时区的 2019 年 8 月 23 日星期五下午 2:31:00。