我正在 CentOS 服务器上工作并使用命令安排任务at
# echo "touch a_long_file_name_file.txt" | at now + 1 minute
job 2 at Wed Oct 31 13:52:00 2018
一分钟后,
# ls | grep a_long_file_name_file.tx
a_long_file_name_file.txt
文件已成功创建。
但是,如果我在 macOS 上本地运行它,
$ echo "touch a_long_file_name_file.txt" | at now + 1 minute
job 31 at Wed Oct 31 13:58:00 2018
几分钟后,如果未能制作出这样的文件。
at
我检查了CentOS服务器上的版本
AUTHOR:
At was mostly written by Thomas Koenig, [email protected].
2009-11-14
相比之下,macOS版本
AUTHORS
At was mostly written by Thomas Koenig <[email protected]>. The time parsing routines are
by
David Parsons <[email protected]>, with minor enhancements by
Joe Halpin <[email protected]>.
BSD January 13, 2002
我发现at
, atq
,atrm
不是 GNU coreutils 的。
$ ls /usr/local/opt/coreutils/libexec/gnubin/ | grep at
cat
date
pathchk
realpath
stat
truncate
如何at
在 macOS 上安装最新版本并使其正常工作?
答案1
让我们尝试让 macOS 上的默认工具正常工作,而不是更新at
macOS 上的相关工具at
。
macOS 上的手册at
说(我的重点):
实施说明
请注意,这
at
是通过launchd(8)
守护进程定期调用来实现的atrun(8)
,默认情况下禁用。atrun(8)
有关启用的信息,请参阅atrun
。
检查atrun
手册:
描述
该
atrun
实用程序运行按 排队的命令at(1)
。它按照属性列表launchd(8)
中的指定定期调用com.apple.atrun.plist
。默认情况下,属性列表包含设置为 true 的禁用键,因此atrun
永远不会被调用。以 root 身份执行以下命令来启用
atrun
:launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist
我认为这里可能发生的情况以及引发您其他at
相关问题的原因是您尚未atrun
在 macOS 安装上启用。
在 macOS Mojave 上,除了运行上述launchctl
命令(使用sudo
)之外,您还必须添加/usr/libexec/atrun
到系统“安全和隐私”首选项中具有“完全磁盘访问”的命令/应用程序列表。请注意,我不知道这样做的安全隐患。就我个人而言,我还在/usr/sbin/cron
那里添加了让 cron 作业正常工作的内容(下面的屏幕截图中未显示,因为这是来自另一台计算机)。
要从/usr
路径添加命令(在 macOS 上不会显示在文件选择对话框中),请Cmd+Shift+G在文件选择对话框打开时按 (按窗口底部的加号图标/按钮后)。
进行这些更改后,您无需重新启动计算机。我已经在 macOS Mojave 14.10.1 上对此进行了测试。
答案2
要添加到 Kusalananda 正确答案,将终端应用程序添加到具有“完全磁盘访问”的应用程序列表将导致 at 作业的标准输出被邮寄给用户。
很抱歉我无法对他的回答发表评论。我注册该网站只是为了添加上述信息,我无权发表评论