首页 > 解决方案 > 使用 at 命令(预定脚本)运行 bash 脚本不起作用

问题描述

我的预定脚本不起作用这是我尝试过的:我有一个 b.sh 文件,其中包含以下内容:

#! /bin/bash
echo "hello, $USER"

我想尝试在 1 分钟内使用“at”命令进行预定发送,如下所示echo b.sh | at now + 1 minute ,但任何地方都没有执行任何操作......

我首先检查了队列atq并确认它正在等待下一分钟执行,但一分钟后,任何地方都没有发生任何事情。

它是否在某个地方执行而我没有在正确的地方寻找?我的印象是它应该在我眼前的终端中执行......

标签: linuxbashterminalgoogle-chrome-oschromebook

解决方案


实际上,与atcommand 一起使用的进程是由atddaemon 执行的。

atd守护程序未连接到您的终端。

但是,如果您想打印消息,您有两种解决方案:

  1. 在脚本开头将您的输出重定向到这样的文件:
exec > /path/to/my_log/file.log
exec 2>&1
  1. 在 bash 的 TTY 上写下:

像这样执行你的at命令:

echo "FATHER_TTY=$(tty) ./b.sh" | at now + 1 minute

而且,./b.sh脚本的内容:

#! /bin/bash
exec > "${FATHER_TTY}"
exec 2>&1
echo "hello, $USER"

推荐阅读