executando script bash remoto do host linux local e problema com "comando echo não funcionando

0

Eu tenho um script bash que estou tentando executar remotamente de outro sistema. É adicionar um cronjob a um usuário no sistema remoto.

Eu corro isso do sistema local.

ssh root@remote_system 'bash -s < /home/user_name/test2.sh'

este é o script no sistema remoto que é executado.

#!/bin/bash
set -x
#valhost=$(hostname)
if [ -d /home/user/junk ]
then
        touch /var/spool/cron/user_name
        crontab -l -u user_name > /home/user_name/mycron
        chmod +x /home/user_name/mycron
        echo "0 0 * * * /bin/find /home/user_name \( -name '*' \) -mtime +45 -delete" >> /home/user_name/mycron
        crontab -u user_name /home/user_name/mycron
elif [ -d /home/user_name/tmp ]
then
        touch /var/spool/cron/user_name
        crontab -l -u user_name > /home/user_name/mycron
        chmod +x /home/user_name/mycron
        echo "0 0 * * * /bin/find /home/user_name \( -name '*' \) -mtime +60 -delete" >> mycron
        crontab -u user_name /home/user_name/mycron
else
    echo "directory does not exist on" $HOSTNAME  > /home/user_name/jbossjunk
fi

Ele verifica se existe um diretório e, em seguida, coloca uma entrada específica no crontab. O script funciona bem quando eu o executo no sistema remoto real. Mas quando eu o executo no local, o eco não sai no arquivo "mycron". Eu procurei em muitos lugares e não encontrei nada na sintaxe que eu poderia usar. Eu tentei inúmeras variações de sintaxe na linha e chegar a maus resultados. Alguém pode me dar a sintaxe que funcionaria para essa linha de "eco" executando o script remotamente

    
por sfbgrousser 13.06.2018 / 21:44

2 respostas

0

Tente usar tee . Como tee manipula a saída de maneira diferente de echo .

if [ -d /home/user/junk ]
then
    touch /var/spool/cron/user_name
    crontab -l -u user_name > /home/user_name/mycron
    chmod +x /home/user_name/mycron
    tee /home/user_name/mycron <<-EOF &>/dev/null
    0 0 * * * /bin/find /home/user_name \( -name '*' \) -mtime +45 -delete
    EOF
    crontab -u user_name /home/user_name/mycron
elif

Este exemplo está lendo heredoc no arquivo especificado por tee . O &>/dev/null envia o STDOUT e o STDERR do comando tee para / dev / null, mas não afeta tee da gravação no arquivo especificado.

    
por 13.06.2018 / 22:26
0

Você tem sete declarações que fazem referência a /home/user_name/mycron (e, a propósito, eu suponho que isso é /home/user_name/mycron , e não literalmente u s e r _ n a m e ) e um que referencia apenas mycron (isto é, um nome de caminho relativo em vez de um absoluto). Se você executar o script de /home/user_name , eles são equivalentes. Se você executar o script de /root , então a instrução echo grava em /root/mycron .

P.S. Você absolutamente não precisa fazer chmod +x /home/user_name/mycron .

    
por 13.06.2018 / 23:36