我在使用 Linux 的“at”命令时遇到了问题,用 Google 搜索“at”非常困难。问题是,无论我运行什么,它似乎都不会停止。
例如这是我编写的一个简单脚本(我将我的用户名替换为 USER):
#!/bin/bash
echo "Testing" > /local/USER/tmp.txt
我将上述几行放入文件 /local/USER/tmp.sh 中,并使该文件可执行。使用以下命令运行它:
/local/rarandje/tmp.sh
按预期工作并创建相关文件。
现在,如果我尝试使用“at”命令:
at -f /local/USER/tmp.sh now + 1 min
它会在所需的时间开始执行但只是挂在那里,这是 at -l 的输出:
10 Wed Jan 21 15:06:00 2015 = USER
10 Wed Jan 21 15:06:00 2015 a USER
没有创建输出 tmp.txt 文件,进程列表中没有“echo”或“tmp.sh”命令,所以我真的不明白问题是什么以及如何调试它。
需要注意的一件事可能很重要,但也可能完全不相关,会分散您的注意力:root 用户对我的主文件夹没有权限(我所在的公司将主文件夹存储在网络上并通过 NAS 安装,因此我机器上的本地 root 用户实际上没有权限读取 NAS 安装的 ~ 文件夹,因为本地 root 与远程 root 不同)。但是,root 确实对 /local/USER/ 具有读/写访问权限,因为那只是一个本地磁盘。不确定这是否相关,例如,也许在 'at' 命令的开头有一些东西是由 root 执行的,需要读取我的 bash 配置文件或其他内容,但这仍然没有意义,我至少希望作业失败,而不是持续“运行”。
我在 Ubuntu 12.04.4 上,有 (本地) root 访问权限。提前致谢。
编辑: 我刚刚尝试以 root 身份执行相同的操作,即以 root 用户身份运行相同的“at”命令,并且一切正常,输出文件已创建并且作业终止。
答案1
@maiki 之后 发表了此评论我查看了/var/log/syslog
并发现了这个错误(我使用 HOSTNAME 和 USERID 将其匿名化):
Jan 21 17:53:32 HOSTNAME atd[27285]: Userid USERID not found - aborting job 14 (a0000e016998f5)
在谷歌搜索了一下之后我发现这个帖子这基本上意味着如果有任何非本地用户,计算机启动时应在 ypbinding 之后运行 atd(我不是计算机设置方面的专家,我有一个网络用户名,我用它来连接到我的电脑,我公司的每个人都可以以相同的方式连接到我的电脑)。我刚刚重新启动了 atd,sudo service atd restart
我的“at”作业现在运行良好。不确定如何永久修复此问题,以便每次重新启动计算机时都不必自己重新启动“atd”,但我会尝试找出答案(并编辑此答案)
答案2
添加您的用户名/etc/at.allow
(如果不存在则创建)
根据手册页:
- 如果
/etc/at.allow
存在,则提到的用户可以访问at
- 否则,如果存在,则除文件中提到的用户之外的
/etc/at.deny
所有用户都有权访问。at
- 否则只有 root 才有权限
at