【问题标题】:setting crontab remotely using shell script.使用 shell 脚本远程设置 crontab。
【发布时间】:2015-10-20 13:49:54
【问题描述】:

我正在尝试编写一个使用 shell 脚本远程设置 crontab 的代码。但是我面临 echo 命令的问题,因为它无法替换变量。

实际代码

#! /usr/bin/ksh
#! /bin/bash
clear

echo -n "" > error.out
echo -n "" > scripts_dir.out
echo -n "" > crontab_check.out


export ORACLE_SID=REPTEST
export ORACLE_HOME=/opt/app/oracle/product/11.2.0_tipical
export PATH=$PATH:$ORACLE_HOME/bin
export TNS_ADMIN=/home/oracle/NIKHIL/apex_oracle_version_changes
export SCRIPTS_DIR=/home/oracle/NIKHIL/Migration_tech_refersh
export REP_USER=repository
export EMAIL_ID="nikhil.mehta@neustar.biz"
export DAY=`date +"%m-%d-%Y"` 
export HOSTNAME=$1
export SID=$2
export USAGE=$3
export ROLE=$4


create_crontab_entries() {

    echo -n "" > ${SCRIPTS_DIR}/crontab_remote_entries/crontab_remote_file_${H_NOFQDN}.${SID}
    echo
    echo -e "Creating crontab entries for RMAN backups and alert_log script"
    echo
    mv ${SCRIPTS_DIR}/crontab_remote_entries/crontab_remote_file_${H_NOFQDN}.${SID} ${SCRIPTS_DIR}/crontab_remote_entries/crontab_remote_file_${H_NOFQDN}.${SID}_$DAY
    echo -e "(crontab -l 2>/dev/null;echo "0,5,10,15,20,25,30,35,40,45,50,55 * * * * /home/oracle/SCRIPTS/MONITOR/alert_log/ksh/CHECK_LOG_ERRORS.ksh ${SID} > /tmp/check_log_${SID}.log 2>&1") |  crontab - " >> ${SCRIPTS_DIR}/crontab_remote_entries/crontab_remote_file_${H_NOFQDN}.${SID}

    echo -e "Checking if crontab is enabled for oracle user"
    ssh -o 'PreferredAuthentications=publickey' oracle@${HOSTNAME} "crontab -l" >> crontab_check.out 2>&1

    if [ "$?" = "0" ]; then
            echo
            echo -e "Crontab is enabled for Oracle user.. Creating Crontab entries!!!"
            scp  -o 'PreferredAuthentications=publickey' ${SCRIPTS_DIR}/crontab_remote_entries/crontab_remote_file_${H_NOFQDN}.${SID} oracle@${HOSTNAME}:/home/oracle >> crontab_check.out 2>&1
            ssh -o 'PreferredAuthentications=publickey' oracle@${HOSTNAME} "chmod 777 /home/oracle/crontab_remote_file_${H_NOFQDN}.${SID};/home/oracle/crontab_remote_file_${H_NOFQDN}.${SID};rm -f /home/oracle/crontab_remote_file_${H_NOFQDN}.${SID}" >> crontab_check.out 2>&1

问题回显命令

echo -e "(crontab -l 2>/dev/null;echo "0,5,10,15,20,25,30,35,40,45,50,55 * * * * /home/oracle/SCRIPTS/MONITOR/alert_log/ksh/CHECK_LOG_ERRORS.ksh ${SID} > /tmp/check_log_${SID}.log 2>&1") |  crontab - " >> ${SCRIPTS_DIR}/crontab_remote_entries/crontab_remote_file_${H_NOFQDN}.${SID}

运行脚本时遇到的错误

Migration_tech_refersh_post_check.ksh: line 275: 1) |  crontab - : ambiguous redirect

请帮助使用 echo 命令,它将按预期替换变量。

【问题讨论】:

  • 尝试在你的回声中转义第二个和第三个"echo \"0,5,102>&1\")
  • 语法高亮是你的朋友...

标签: bash shell echo ksh


【解决方案1】:

我能够通过将整个命令分成 3 个字符串来解决问题,如下所示。

    str1='(crontab -l 2>/dev/null;echo "0,5,10,15,20,25,30,35,40,45,50,55 * * * * /home/oracle/SCRIPTS/MONITOR/alert_log/ksh/CHECK_LOG_ERRORS.ksh '
    str2="$str1 $SID > /tmp/check_log_${SID}.log 2>&1"
    str3='") |  crontab - '
    full_cmd1="$str2$str3"

感谢大家的帮助。

问候, 兰瑟里克。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 2017-06-09
    • 1970-01-01
    相关资源
    最近更新 更多