让“at”在 macOS 上工作

让“at”在 macOS 上工作

我正在 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 上的默认工具正常工作,而不是更新atmacOS 上的相关工具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 作业的标准输出被邮寄给用户。

很抱歉我无法对他的回答发表评论。我注册该网站只是为了添加上述信息,我无权发表评论

相关内容