“at”命令不起作用

“at”命令不起作用

我想用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,它可能会起作用(使用您使用的任何终端进行测试)。所以,我猜真正的问题是该命令正在后台执行,您需要提取要提示的字符串并对其进行任何您需要的操作(可能将其发送给任何用户writewall命令)。

答案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 系统)上运行效果最佳。

相关内容