Centos

讓“at”在 macOS 上工作

  • February 22, 2020

我正在使用 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

幾分鐘後,如果它無法製作這樣的文件。

我檢查了atCentOS 伺服器上的版本

AUTHOR:  
At was mostly written by Thomas Koenig, ig25@rz.uni-karlsruhe.de.  
2009-11-14                                             

相比之下,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                            

我發現 , at,atq不是atrmGNU coreutils 的。

$ ls /usr/local/opt/coreutils/libexec/gnubin/ | grep at
cat
date
pathchk
realpath
stat
truncate

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

at讓我們嘗試在 macOS 上使用預設設置,而不是在 macOS 上更新和相關工具at

macOS 上的at手冊說(我的重點):

實施說明

請注意,這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

我認為這裡可能發生的事情以及提示您其他at相關問題的是您尚未atrun在 macOS 安裝上啟用。

在 macOS Mojave 上,除了執行上述launchctl命令(使用sudo)外,您還必須/usr/libexec/atrun在系統的“安全和隱私”首選項中添加具有“全盤訪問”的命令/應用程序列表。請注意,我不知道這樣做的安全隱患。就個人而言,我還在/usr/sbin/cron那裡添加了讓 cron 作業正常工作(下面的螢幕截圖中未顯示,因為這是來自另一台電腦)。

在此處輸入圖像描述

要從/usr路徑添加命令(不會顯示在 macOS 的文件選擇對話框中),Cmd+Shift+G請在文件選擇對話框打開時按(在按視窗底部的加號圖示/按鈕後)。

在進行這些更改後,您無需重新啟動機器。我已經在 macOS Mojave 14.10.1 上對此進行了測試。

引用自:https://unix.stackexchange.com/questions/478823