macos 中的 Atrun 命令未启动

macos 中的 Atrun 命令未启动

我正在学习 macOS 中的“at”命令。但是,我的“at”命令作业已被安排但从未执行。例如,当我运行像这样的简单命令时echo "hello world" | at 9:30 AM,它不会产生任何输出。我还尝试创建一个目录,但它没有按预期工作。这是我使用的脚本:

#!/bin/bash
mkdir at_file
touch at_file/files{001..100}.txt

我认为可能存在与 atrun 服务或特定于 macOS 的其他配置相关的问题。如果我的理解是正确的,我将不胜感激有关如何专门针对 macOS 解决此问题的指导。

我还尝试了以下步骤来解决该问题:

首先,我尝试使用以下命令卸载和加载 atrun 服务:

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.atrun.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist

但是,当我运行第二个命令时,它显示“ALREADY RUNNING”作为输出。

然后,我尝试使用以下命令停止和启动 atrun 服务:

sudo launchctl stop com.apple.atrun
sudo launchctl start com.apple.atrun

但是当我使用 launchctl list | 检查状态时grep com.apple.atrun,它没有产生任何输出。

最后,我运行 at -l 命令来列出所有作业 ID 和脚本,但作业从未执行。

看起来,尽管使用“at”命令安排作业,但它们并未按预期执行。我不确定为什么会发生这种情况,希望获得有关解决此问题的任何帮助或指导

答案1

两个原因:

(a) 将echo文本发送hello world到管道中,并将at其存储为要运行的命令。该命令hello不存在,因此作业失败。您可以使用 来修复此问题echo "echo hello world" | at 9:30 AM。就我个人而言,我更喜欢输入要作为 HereDoc 执行的命令。

(b)at系统不知道哪个终端设置了该作业; at 作业也可以由后台脚本设置;并且任何终端在任何情况下都可能在设置作业和执行作业之间关闭。所以作业没有地方发送输出。at作业的标准输入连接到/dev/null。通常,除非重定向,否则 stdout 和 stderr 会通过电子邮件发送给作业所有者。

编辑:对于在后台运行的东西,采取小步骤。记录所有内容,证明它确实运行过(以及何时运行),用调试填充它,然后发布实际发生的情况。

如果这创建了 ~/Debug.atjob,那么您就有了一个工作at系统。如果没有,那就是开始搞乱安装的时候了,而不是之前。

另请注意,四舍五入now + 1 minute为整分钟。at是套餐的一部分cron,只有一分钟歧视。如果cron它不起作用,您可能会注意到。

$ ls -l ~/Debug.atjob at_file
ls: cannot access '/home/paul/Debug.atjob': No such file or directory
ls: cannot access 'at_file': No such file or directory
$ cat atBug
#! /bin/bash

{
    pwd
    date '+Began at %T'
    mkdir at_file
    echo "Status mkdir $?"
    ls -ld at_file
    touch at_file/files{001..100}.txt
    echo "Status touch $?"
    echo 'First three'
    ls -l at_file | head -n 3
    echo 'Last three'
    ls -l at_file | tail -n 3
    date '+Ended at %T'
} > ~/Debug.atjob 2>&1

$ date; echo './atBug' | at now + 1 minute; atq
Tue 18 Jul 09:06:48 BST 2023
warning: commands will be executed using /bin/sh
job 45 at Tue Jul 18 09:07:00 2023
45  Tue Jul 18 09:07:00 2023 a paul
$ sleep 60
$ cat ~/Debug.atjob
/home/paul
Began at 09:07:01
Status mkdir 0
drwxrwxr-x 2 paul paul 4096 Jul 18 09:07 at_file
Status touch 0
First three
total 0
-rw-rw-r-- 1 paul paul 0 Jul 18 09:07 files001.txt
-rw-rw-r-- 1 paul paul 0 Jul 18 09:07 files002.txt
Last three
-rw-rw-r-- 1 paul paul 0 Jul 18 09:07 files098.txt
-rw-rw-r-- 1 paul paul 0 Jul 18 09:07 files099.txt
-rw-rw-r-- 1 paul paul 0 Jul 18 09:07 files100.txt
Ended at 09:07:01
$ 

相关内容