我正在学习 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
$