我在我的代码
中这样做ssh -q username@ip 'crontab -l' > $PWD/crontab.txt
如果服务器有crontab
,则没有问题。但如果该服务器没有crontab,我会收到消息no crontab for username
。
有没有办法禁用此消息?当没有crontab时,我不希望它输出任何内容。
提前致谢
答案 0 :(得分:0)
我知道这是一个较旧的帖子,但我也一直在努力解决这个问题,直到现在还没有找到令人满意的答案。我想取消此消息的原因是我正在编写一个脚本,该脚本还使用以下几行向 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-lines。要检查行是否添加正确,我们可以使用:
crontab -l
这将生成最近添加的 cronline。