终端返回:用户没有 crontab

终端返回:用户没有 crontab

我创建了一个新用户,约翰。现在我想以编程方式向用户 john 的 crontab 写入一个 cronjob。

#!/bin/bash
#script name: cronbuild.sh

cronjob1="0 */3 * * * /home/john/ad_dev/modem_dog.sh"
{ crontab -l -u john; echo "$cronjob1"; } | crontab -u john -

现在这确实写入了约翰的 crontab。但是,该脚本返回:

tony@rpi:~ $: sudo ./cronbuild.sh
no crontab for user
tony@rpi:~ $

确认它确实将其写入用户 john 的 crontab...

tony@rpi:~ $: sudo crontab -u john -l
0 */3 * * * /home/john/ad_dev/modem_dog.sh
tony@rpi:~ $:

我猜终端会返回

用户没有 crontab

因为它实际上没有 crontab...?看起来很明显而且没有帮助。

所以我的问题是,为什么这样说用户没有 crontab

答案1

该消息来自crontab -l -u john您在脚本中使用的消息。

一方面你做到了使用命令。使用它的唯一(?)原因是保留旧的 crontab 并附加到它(而不仅仅是覆盖它)。如果旧的 crontab 包含您想要保留的任意内容,这可能是一个不错的决定。如果您多次运行脚本(您添加的行会累积),这可能是一个错误的决定。

另一方面,你说这个消息“显而易见,没有帮助”,我想是因为你知道用户还没有 crontab。但如果你确定没有 crontab,那么crontab -l …一开始就没有必要。所以或许你不需要它。

您使用该命令的事实可以解释为您期望(或至少允许) crontab 存在。所以就是合理的如果它不存在则警告您。这就是该命令的作用。您可以通过将 stderr 发送到以下地址来抑制该消息/dev/null

{ crontab -l -u john 2>/dev/null; echo …

相关内容