【问题标题】:at command is not executedat 命令未执行
【发布时间】:2021-09-13 15:25:22
【问题描述】:

我正在尝试让at bash 命令运行,但它对我不起作用。我可以将作业添加到队列中,但时间到时它不会运行。我做错了什么?

hpek@melda:~$ cat /usr/lib/cron/at.deny 
hpek@melda:~$ atq
hpek@melda:~$ at now +2 minutes
echo TTTEEEST
job 12 at Sun May  6 02:09:00 2012
hpek@melda:~$ date
Sun May  6 02:10:24 CEST 2012
hpek@melda:~$ atq
12  Sun May  6 02:09:00 2012
hpek@melda:~$ 

UPD2021.08.06 atd 在 MacOS 11.5.2(或更早版本)中被删除

$ sudo find / -name atd -print 2>/dev/null
$ 

【问题讨论】:

标签: bash unix


【解决方案1】:

它工作正常。只是使用at 运行的命令不会将其输出写入您调用它的终端。

试试:

at now +2 minutes
echo TTTEEEST > new_file_test

您会在两分钟后看到该文件。

【讨论】:

  • 如果你给一个绝对路径名怎么样?可能at(1) 正在您的主目录或其主目录中执行脚本。 (我的在我用户的主目录中执行;使用/bin/pwd > /tmp/pwd 测试。)
  • @sarnold:不——它不工作。时间到了,你的工作是否被移除(从atq)?
  • @Hans-PeterE.Kristiansen 是的,你是对的。抱歉回答错误。
【解决方案2】:

查看/var/at/jobs 并查看您的工作是否在此处列出。 (根据操作系统,它可能是不同的目录)。

默认情况下,at 在大多数系统上未启用。为了真正执行at 作业,必须执行atrun 命令。

此命令通过launchdcron 执行,具体取决于系统。

具体机制因系统而异,因此您必须阅读 atatrun 等上的所有各种联机帮助页,以验证您的系统是否真的启用了 at,以及是否您有权在作业中运行。您的系统上通常同时存在 ant allowant deny 文件,因此您需要同时检查这两个文件。您必须既在 allowed 文件中,又不在 deny 文件中。

除此之外,您还必须确保在您的系统上启用了at(出于安全考虑,它通常被禁用)。

【讨论】:

  • 你知道cent OS 7中/var/at/jobs的位置在哪里吗?
【解决方案3】:

检查您的邮件:

   An at - or batch - command invoked from a su(1) shell will
   retain the current userid.  The user will be mailed standard
   error and standard output from his commands, if any.  Mail
   will be sent using the command /usr/sbin/sendmail.  If at is
   executed from a su(1) shell, the owner of the login shell
   will receive the mail.

【讨论】:

  • 我没有收到任何新邮件。
【解决方案4】:

我找到了这个here

首先使用如下命令确保 at 守护进程正在运行:

# ps -ef | grep atd
root 8231 1 0 18:10 ? 00:00:00 /usr/sbin/atd

如果您没有看到 atd 正在运行,请使用以下命令启动它:

# /etc/init.d/atd start

【讨论】:

  • $ /etc/init.d/atd start -bash: /etc/init.d/atd: 没有这样的文件或目录有人在 11.5.2 中进行了“改进”
  • 哇! $ ls -la /etc/init.d ls: /etc/init.d:​​ 没有那个文件或目录
【解决方案5】:

分析 at(d) 执行问题可能会有所帮助

  1. 检查 /etc/at.allow 和 /etc/at.deny 是否存在和内容(请参阅man at.allow
  2. 检查 atd 假脱机目录的所有者和访问权限 (/var/spool/cron/atjobs,daemon:daemon,在 Ubuntu 上为 770)
  3. 检查 atd 守护进程是否正在运行(systemctrl -a | grep atd 在 Ubuntu 上)
  4. tail -f /var/log/syslog(执行时)
  5. journalctl -b | grep atd(发现here,包含更多提示)

“权限被拒绝”错误也可能是由于在 /etc/security/limits.conf 中定义的登录次数有限(针对at 运行用户)。

【讨论】:

  • antonsmbp:tango atropashko$ journalctl -b | grep atd -bash: journalctl: 找不到命令 antonsmbp:tango atropashko$ sudo journalctl -b | grep atd sudo: journalctl: command not found
  • @AntonTropashko 您正在尝试哪个操作系统?
【解决方案6】:

at 命令一起使用时,我也遇到了同样的 echo 问题。但是,如果您尝试使用>>> 重定向输出,那么它可以完美运行。还可以尝试其他一些系统命令,例如rebootls > some_text_file 等,以确保 at 命令正常工作。其他尝试 sudo systemctl enable --now atd 启用 at 守护进程

【讨论】:

  • sudo systemctl enable --now atd
猜你喜欢
  • 2013-11-20
  • 1970-01-01
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多