通过ssh更新远程cron

时间:2018-01-11 12:56:14

标签: bash ssh cron

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

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

1 个答案:

答案 0 :(得分:0)

存储多个值尖叫&#34;数组&#34;。使用数组来存储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

其他建议:

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