Ubuntu Bash cron heredoc 不起作用

Ubuntu Bash cron heredoc 不起作用

我使用 Ubuntu 16.04,并以用户身份登录到我的远程机器root,然后运行以下需要向 Unix cron 添加一些计划任务的脚本:

#!/bin/bash

su USERNAME

crontab -l 2>/dev/null

cat <<- 'EOF'

       * * * * * cron-task1...
       * * * * * cron-task1...

       * * * * * cron-task2...
       * * * * * cron-task2...

       * * * * * cron-task3...
       * * * * * cron-task3...

EOF

exit

由于某种原因,此代码不起作用,即执行后,cron 任务不会从 heredoc 打印到 cron,但任务代码很好,就好像我像在 中一样手动复制它们crontab -e,它们就可以正常工作。

上述代码可能存在什么问题?谢谢,


Chev_603 的更新:

如果我执行:

su USERNAME

sudo cat <<- 'EOF' > cron.jobs
* * * * * CRON TASKS...
EOF

我得到:

bash:cron.jobs:权限被拒绝

如果我使用文件,我只会更改所有权、组和权限,但sudo chmod +x /home/user/Location/Of/Script考虑到它是一个 heredoc,我猜情况并非如此。

答案1

尽管该问题被标记为重复,我还是回答了它,因为问题在于cat和的语法都不crontab正确。

没有现有的 crontab,并且语法不正确。例如,如果我在未配置 cron 的情况下执行此操作,则会发生以下情况:

$ crontab -l
no crontab for anon

然后您只需将此处文档的内容发送到标准输出即可。

首先创建一个这样的 crontab 文件:

cat <<- 'EOF' > cron.jobs

   * * * * * cron-task1...
   * * * * * cron-task2...
   * * * * * cron-task3...

EOF

crontab cron.jobs

然后确认它有效:

crontab -l
 * * * * * cron-task1...
 * * * * * cron-task2...
 * * * * * cron-task3...

它不起作用的原因是因为crontab -l它只是将用户 cron 文件的内容显示到标准输出:

man crontab

   The -l option causes the current crontab to be displayed on standard output. See the note under DEBIAN SPECIFIC below.

另外,除了使用su,您还可以使用

cat cron.jobs |crontab -u user -

把所有这些放在一起,将其添加到脚本中,然后说cron.sh并尝试这个:

#!/bin/bash
user="$@"
cat <<- 'EOF' > cron.jobs

   * * * * * cron-task1...
   * * * * * cron-task2...
   * * * * * cron-task3...

EOF


cat cron.jobs|crontab -u $user -

进而:

bash cron.sh username

但我认为你想要的更像是:

cat <<< '
* * * * *  cron-task1... ' |crontab -

相关内容