无法使用“at”实用程序

无法使用“at”实用程序

我使用 Ubuntu 16.04 并尝试直接在 Bash 上执行:

sudo cat << EOF | at 'now + 1 minute'
echo "hello"
EOF

我得到:

warning: commands will be executed using /bin/sh job 6 
at Wed Dec 28 03:01:00 2016
Can't signal atd (permission denied)

因此,如果没有权限运行该命令,该短语hello将不会在 Bash 上回显。

如果我使用sudo,为什么权限会被拒绝?与 不同,cd它不是一个实用程序,而是一个内置 shell 命令,at(以及cat) 是实用程序,因此sudo应该应用它们。

您也许知道为什么不能使用吗?

答案1

TL;DR:sudo通过管道(|)移动到at命令本身。

您实际上尚未at以 root 身份运行。

cat以 root 身份运行 ( sudo cat ...),并将 的输出通过管道传输catat,但您并没有at以 root 身份运行命令本身。

在许多系统中,一些非 root 用户被允许运行 at 作业。但是,如果这不是您想要的,您的系统配置方式符合您的喜好,并且您打算以 root 身份运行此特定 at 作业,那么您可以通过at以 root 身份而不是 来解决问题cat。(无论哪种方式,您在这种情况下都不需要cat以 root 身份运行。)

要做到这一点,请在sudo之前放置:atcat

cat << EOF | sudo at 'now + 1 minute'

可选详细信息:

目前您有:

sudo cat << EOF | at 'now + 1 minute'
echo "hello"
EOF

cat以 root 身份运行sudo,并将传递echo "hello"给它(使用 here-document 语法)。该cat命令的标准输出通过管道传输到命令at 'now + 1 minute',即不是以 root 身份运行。因此at尝试以运行该作业的非 root 用户(您)的身份来安排该作业。

如果您希望 at 作业以 root 身份运行,您可以通过将其更改为以下方式解决此问题:

cat << EOF | sudo at 'now + 1 minute'
echo "hello"
EOF

如果您稍后配置了允许运行作业的非 root 用户帐户,然后你会跑两者都不以 root 身份执行命令:

cat << EOF | at 'now + 1 minute'
echo "hello"
EOF

相关内容