我想用at
命令安排一项工作并看到此错误:
[root@labeir1 exm]# date
Sun Dec 9 01:54:45 IST 2012
[root@labeir1 exm]# at 01:47 "df -kh"
syntax error. Last token seen: d
Garbled time
即使没有引号也不起作用。
而当我安排相同的命令像这样执行时:
[root@labeir1 exm]# echo df -kh | at 01:47
job 4 at 2012-12-10 01:47
它显示作业已安排,但在特定时间我没有看到输出。难道不是在控制台上可以看到输出吗?
答案1
不,输出不会出现在控制台上。我希望输出会通过电子邮件发送给您。尝试
echo df –kh | at –m 01:47
明确要求提供电子邮件,或
echo "df –kh > df_output.txt" | at 01:47
写入文件。
答案2
尝试类似以下操作:
mesg y # this is just to make sure you may write to your user
at now + 1 min
at>df -kh | write $USER
at>^D
如果这不起作用,则说明您没有util-linux
安装pty-helper
启用标志的程序,或者您需要指定要在其中输出的显示器(很可能是$DISPLAY
)
请注意,如果你执行类似以下操作:
at now + 1 min
at>xterm
at>^D
如果您安装了 xterm,它可能会起作用(使用您使用的任何终端进行测试)。所以,我猜真正的问题是该命令正在后台执行,您需要提取要提示的字符串并对其进行任何您需要的操作(可能将其发送给任何用户write
或wall
命令)。
答案3
对于在这篇文章中搜索过问题的人,可以检查以下其他解决方案:
确保 atd 服务正在运行
atd.service 可能未运行。如果您使用的是 init.d 系统,请使用以下命令启用并启动它:
systemctl enable atd
systemctl start atd
图形应用程序?
如果要打开图形应用程序,则需要export DISPLAY=:0.0
在命令行中输入 at ,然后在下一行输入命令。完成后按 Ctrl+d 保存。
答案4
有点题外话,但我一直在为 的“乱码时间”输出而苦恼at
,所以我想分享一下我的解决方法。我的解决方案是将 包装在一个函数中,并使用更宽容的 来date
修复乱码时间消息。
function at {
unset IFS
MOMENT=$*
AT=$(which at)
# First try at to see if I finally figured out to produce non-garbled time
if ${AT} ${MOMENT} 2>/dev/null
then
# worked allright, we can exit
exit
else
# We produced garbled time (duh), so let's fix this with date
MOMENT=$(date --date "${MOMENT}" +'%Y%m%d%H%M')
fi
# and try again
${AT} -t ${MOMENT}
}
这在安装了 GNU 日期的系统(大多数 Linux 系统)上运行效果最佳。