【问题标题】:Updating remote cron via ssh通过 ssh 更新远程 cron
【发布时间】:2018-06-20 19:35:57
【问题描述】:

我需要在多台机器上添加/删除 cron 作业。我有以下将通过变量添加单个 cron 但我需要变量添加多个即

CRON1=添加 cron && 添加第二个 cron && 添加第三个 cron。

我尝试了各种表达式,但执行第二个命令时总是得到错误。

#!/bin/bash
USERNAME=user
HOSTS="1.2.3.4 4.3.2.1"

CRON1='(crontab -l 2>/dev/null; echo "*/5 * * * * /path/to/job") | crontab -'

for HOSTNAME in ${HOSTS} ; do
ssh -l ${USERNAME} ${HOSTNAME} << EOF

$CRON1

EOF
done

【问题讨论】:

  • 我会在 for 循环之前生成一个包含所有您需要的条目的 tmp 文件,然后您可以仅使用 crontab &lt;&lt; tmpfile 重定向整个文件(我认为,请仔细测试!)。祝你好运。
  • 如果你使用的是 Bash 3+,你可以这样做crontab &lt;&lt;&lt;string

标签: bash ssh cron


【解决方案1】:

存储多个值会尖叫“数组”。使用数组来存储 cron 作业。然后你可以做的是将heredoc切换到一个动态生成必要的echo命令的管道。

#!/bin/bash

username=user
hostnames=(1.2.3.4 4.3.2.1)
jobs=(
    '*/5 * * * * /path/to/job1'
    '*/5 * * * * /path/to/job2'
    '*/5 * * * * /path/to/job3'
)

for hostname in "${hostnames[@]}"; do
    {
        printf '{\n'
        printf 'crontab -l 2>/dev/null\n'
        for job in "${jobs[@}}"; do printf 'echo %q\n' "$job"; done
        printf '} | crontab -'
    } | ssh -l "$username" "$hostname"
done

其他建议:

  • 所有大写变量名都是为外壳保留的。最好自己避免使用它们。
  • 成对使用单数和复数变量名。 $hostname 是 $hostnames 数组的一个元素。

【讨论】:

  • 我得到 cron3.sh:第 15 行:${jobs[@}}:错误替换和 -bash:第 3 行:语法错误:文件意外结束
猜你喜欢
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 2014-05-22
  • 2017-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-04
相关资源
最近更新 更多