如何在 shell 中禁用“no crontab for user”消息

问题描述 投票:0回答:2

我在我的代码中这样做

ssh -q username@ip 'crontab -l' > $PWD/crontab.txt

如果服务器有

crontab
,则工作没有问题。但如果该服务器没有 crontab,我会收到消息
no crontab for username

有办法禁用此消息吗?当没有 crontab 时,我不希望它输出任何内容。

提前致谢

shell ssh message cron
2个回答
1
投票

我知道这是一篇较旧的帖子,但我也一直在努力解决这个问题,直到现在才找到令人满意的答案。我想抑制此消息的原因是我正在编写一个脚本,该脚本还使用以下行向 crontab 添加一行,并为用户提供我自己的自定义输出:

CRON_LINE='0 0 1 * * /path/to/my_script.sh'
(crontab -u antiftw -l; echo "$CRON_LINE" ) | crontab -u antiftw -

我尝试在第二行末尾添加常用的重定向(如评论中所述),但这两者都没有抑制该消息:

2> /dev/null
>> /dev/null 2>&1

因此,经过一番查看和测试后,我发现显示此消息的原因是 crontab 存储位置不存在文件。在 Ubuntu 20.04 中,这是:

/var/spool/cron/crontabs/

此文件包含我们为其创建 crontab 的用户的名称:

/var/spool/cron/crontabs/root 对于 root 用户

/var/spool/cron/crontabs/antiftw 对于用户“antiftw”

因此,如果我们想为用户“antiftw”创建一个 crontab,我们可以使用以下命令在此位置创建一个空文件:

touch /var/spool/cron/crontabs/antiftw

在此之后,为该文件提供正确的所有者/组和文件权限非常重要,否则在尝试使用 crontab 命令修改 crontab 时,我们会收到以下错误:

crontab:crontabs/antiftw:重命名:不允许操作

所以我们执行以下命令:

 chmod 600 /var/spool/cron/crontabs/antiftw
 chown antiftw:crontab /var/spool/cron/crontabs/antiftw

注意:如果我们想为 root 用户执行此操作,则更改为:

 chmod 600 /var/spool/cron/crontabs/root
 chown root:crontab /var/spool/cron/crontabs/root

产生以下权限:

-rw-------- 1 antiftw crontab

现在我们已经准备好了文件,我们可以添加我们的 cron 行而不会收到消息。要检查行是否已正确添加,我们可以使用:

crontab -l

这将产生最近添加的 cronline。


0
投票

要添加 AntiFTW 答案,我宁愿使用 crontab 本身创建空文件:

echo -n | crontab -

在创建空 crontab 之前检查是否已经存在 crontab:

crontab -l &> /dev/null || echo -n | crontab -
© www.soinside.com 2019 - 2024. All rights reserved.