使“at”在 macOS 上工作

Abs*_*cDo 5 osx centos at

我正在 CentOS 服务器上工作并使用命令安排任务 at

# echo "touch a_long_file_name_file.txt" | at now + 1 minute
job 2 at Wed Oct 31 13:52:00 2018
Run Code Online (Sandbox Code Playgroud)

一分钟后,

# ls | grep a_long_file_name_file.tx
a_long_file_name_file.txt
Run Code Online (Sandbox Code Playgroud)

文件创建成功。

但是,如果我在 macOS 上本地运行它,

$ echo "touch a_long_file_name_file.txt" | at now + 1 minute
job 31 at Wed Oct 31 13:58:00 2018
Run Code Online (Sandbox Code Playgroud)

几分钟后,如果它无法制作这样的文件。

我检查at了 CentOS 服务器上的版本

AUTHOR:  
At was mostly written by Thomas Koenig, ig25@rz.uni-karlsruhe.de.  
2009-11-14                                             
Run Code Online (Sandbox Code Playgroud)

相比之下,macOS 版本

AUTHORS
     At was mostly written by Thomas Koenig <ig25@rz.uni-karlsruhe.de>.  The time parsing routines are
     by
     David Parsons <orc@pell.chi.il.us>, with minor enhancements by
     Joe Halpin <joe.halpin@attbi.com>.

BSD                            January 13, 2002                            
Run Code Online (Sandbox Code Playgroud)

我发现atatqatrm是GNU的coreutils没有。

$ ls /usr/local/opt/coreutils/libexec/gnubin/ | grep at
cat
date
pathchk
realpath
stat
truncate
Run Code Online (Sandbox Code Playgroud)

如何at在 macOS 上安装最新版本并使其正常工作?

Kus*_*nda 21

与其更新atmacOS 上的相关工具,不如尝试使atmacOS 上的默认设置正常工作。

atmacOS 上的手册说(我的重点):

实施说明

请注意,at通过实施launchd(8)守护进程定期调用atrun(8)默认情况下是禁用的。请参阅atrun(8)有关启用信息atrun

检查atrun手册:

描述

atrun实用程序运行由 排队的命令at(1)。它由属性列表中launchd(8)指定的定期调用com.apple.atrun.plist。默认情况下,属性列表包含设置为 true 的 Disabled 键,因此atrun永远不会调用。

以 root 身份执行以下命令以启用atrun

launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist
Run Code Online (Sandbox Code Playgroud)

我认为这里可能发生的事情以及提示您其他at相关问题的原因是您尚未atrun在 macOS 安装中启用。

在 macOS Mojave 上,除了运行上述launchctl命令(使用sudo)外,您还必须/usr/libexec/atrun在系统的“安全和隐私”首选项中添加具有“完整磁盘访问权限”的命令/应用程序列表。请注意,我不知道这样做的安全隐患。就我个人而言,我还在/usr/sbin/cron那里添加了 cron 作业以使其工作(下面的屏幕截图中未显示,因为这是来自另一台计算机)。

在此处输入图片说明

要从/usr路径中添加命令(不会在 macOS 的文件选择对话框中显示),请Cmd+Shift+G在文件选择对话框打开时按下(按下窗口底部的加号图标/按钮后)。

进行这些更改后,您无需重新启动计算机。我已经在 macOS Mojave 14.10.1 上测试过了。